python 基础课--OOP2
1-类和对象的成员分析
.类和对象都可以存储成员,成员可以归类所有,也可以归对象所有
.类存储成员时使用的是与类关联的一个对象
.独享存储成员是存储在当前对象中
.对象访问一个成员时,如果对象中没有该成员尝试访问类中同名成员
如果对象中有此成员,一定使用对象中的成员
.创建对象的时候,类中的成员不会放到对象当中,而是一个空对象,没有成员
.通过对象对类中成员重新赋值或者通过对象添加成员时,对应成员会保存在对象中,而不会修改类成员
2-关于self的相关知识
.self在对象的方法中表示当前对象本身,如果通过对象调用一个方法,那么该对象会自动传入到当前方法的第一个参数中
.self并不是关键字,知识一个用于接收对象的普通参数
.方法中有self形参的方法为非绑定类的方法,可以通过对象访问,没有self的是绑定类的方法,通过类访问
.使用类访问绑定类的方法时,如果类方法中需要访问当前类的成员,可以通过__class__成员名来访问
class Teacher():
name='xiong'
age=19
def say(self):
self.name='dada'
self.age=19
print('my name is{0}'.format(self.name))
print('my age is {0}'.format(self.age))
def sayagain():
print(__class__.name)---输出xiong
print(__class__.age)---输出19
print('hello,world')
t=Teacher()
t.say()
#调用绑定类函数使用类名
Teacher.sayagain()
关于self的小实例
class A():
name='liulu'
age=18
def __init__(self)
self.name='aaaa'
self.age=200
def say(self):
print(self.name)
print(self.age)
class B():
name='bbbb'
age=90
a=A()
#此时系统把a当作第一个参数传入
a.say()
#此时self被a代替
A.say(a)
#同样也可以用A代替
A。say(A)--liulu,200
A.say(B)---bbbb,90
以上代码利用了鸭子模型
3-面向对象的三大特性
.封装
.继承
.多态
3.1
封装就是对对象的成员进行访限制
封装的三个级别
.公开public
.受保护protected
.私有private
判别对象的位置
.对象内部
.对象外部
.子类中
私有
.私有成员是最高级别的封装,只能在当前类或对象中访问
.在成员前添加两个下下划线即可
class Person():
#name是公有的成员
name='liulu'
#__age就是私有成员
__age=18
p=Person()
p.name
访问私有变量出错
python的私有是一种name mangling的改名策略
可以使用
对象._classname__attributename访问
print(p._Person__age)访问
受保护的封装
.受保护的封装是将对象成员进行一定级别的封装,然后在类中或者子类中都可以进行访问,但是在外部不可以
.封装方法,在成员名称前加一个下划线即可
公开的,公共的
.公共的封装实际对成员没有任何操作,任何地方都可以访问
3.2继承
继承就是一个类可以获得另外一个类中的成员属性和成员方法
作用:减少代码,增加代码的复用功能,同时可以设置类与类直接的关系
继承与被继承的概念
.被继承的类叫做父类,也叫做基类,超类
.用于继承的类叫做子类,也叫做派生类
.继承与被继承一定存在一个is-a的关系
.在python中任何类都有一个共同的父类叫做object
继承的语法
class Person():
name='name'
age=0
def sleep(self):
print('zzzz')
class Teacher(Person):
pass
t=Teacher
print(t.name)---name
print(t.age)---0
继承的特征
.所有的类都是object的子类
.子类一旦继承父类,则可以使用除私有外的所有内容
.子类继承父类后并没有将父类成员完全赋值到子类中,而是通过引用关系访问调用
.子类中可以定义独有的成员属性和方法
class Person():
name='name'
age=0
def sleep(self):
print('zzzz')
class Teacher(Person):
def make_test(self)
pass
.子类中定义的成员和父类成员如果相同,则优先使用子类成员
.子类如果项扩充父类的方法可以在定义新方法的同时访问父类成员来代码重用
可以使用父类名.父类成员的格式来调用父类成员,也可以使用super().父类成员来调用
class Person():
name='name'
age=0
def sleep(self):
print('zzzz')
def work(self):
print('make money')
class Teacher(Person):
def make_test(self)
print('make test...')
pass
def work(self):
#扩充父类的功能只需要调用父类相应的函数
Person.work(self)
#另一种方法
super().work()
self.make_test
t=Teacher()
t.work()------------make money
python中OOP面向对象基础(2)
最新推荐文章于 2025-06-17 08:30:00 发布
