python中对象的特性_Python:面向对象的三大特性

面向对象的三大特性

封装,继承,多态

继承:可以有效的节省代码

python中类分为两种:

新式类,经典类。

python3x 中所有的类都默认继承object类,继承object类的类称为新式类。

Python2 中默认是经典类,如果改成新式类,就让类(object) 继承object类

新式类 :遵循的广度优先。

经典类 :遵循的深度优先。

通过mro(类名)方法可以查看到类的继承循序

继承的问题:

classAnimal:

soup= '灵魂'

def __init__(self,varieties, sex, color):

self.varieties=varieties

self.sex=sex

self.color=colordefeat(self):print('吃')classCat(Animal):

a=Animal.eatdefeat(self):print('猫吃饭')classBird(Animal):def __init__(self,varieties, sex, color,fly):#Animal.__init__(self,varieties, sex, color,)      # 执行父类的方法第一种方式

#super(Animal,self).__init__(varieties, sex, color,) # 执行父类的方法第二种方式

super().__init__(varieties, sex, color,)         #执行父类的方法第二种方式 省略写法 super方法可以不用去关心父类具体名字。

self.fly = fly #个性化的封装

defeat(self):

super().eat()print('鸟该吃饭了....')

cat1= Cat('波斯猫', '公', '橘黄')

cat1.eat()#问题一:#执行顺序,所以执行 猫吃饭.

#问题二:#猫,鸟,都有自己独立属性,如何使用共同的属性并且使用独立的属性。

b1 = Bird('鹦鹉','公', '绿色',800)#print(b1.__dict__)

b1.eat()

在多继承当中,新式类中采用的是mro算法

我们可以使用print(类名.__mro__)方法查看到该类的继承顺序。

接口类、抽象类

定义一个基类,把基类中的方法定义成接口函数,可以限制继承他的子类必须实现这个方法,即所有的子类都必须兼容父类的方法。

importabcclass All_file(metaclass=abc.ABCMeta):

@abc.abstractmethod#实现接口函数的装饰器

def read(self): #接口函数本身不用具体的实现,而是有继承他的子类自己去实现

pass@abc.abstractmethoddefwrite(self):pass

classDisk(All_file):defread(self):print('disk read')defwrite(self):print('disk write')classCdrom(All_file):defread(self):print('cdrom read')defwrite(self):print('cdrom write')classMem(All_file):defread(self):print('mem read')defwrite(self):print('mem write')m1=Mem()

m1.read()

m1.write()

封装:

广义封装:封装到对象中的属性是一种封装。 类本身就算是一种封装

classPerson:

country= 'China'

def __init__(self,name,age):

self.name=name

self.age=agedeffunc(self):print(self.name)

p1= Person('alex',1000)

p2= Person('wusir',10000)

p1.func()

狭义分装:私有性封装,在类内部,通过 _ _ 开头定义的方法或静态变量,都称之为私有的

私有:私有静态字段(私有静态变量),私有普通字段(私有对象属性),私有方法。

私有静态字段(私有静态变量)classPerson:

country= 'China' #公有静态字段(公有静态变量)

__name = 'oldboy' #私有静态字段(私有静态变量)

__age = 1000 #私有静态字段(私有静态变量)

deffunc1(self):return self.__name

print(Person.country)

#在类的外部不能调用print(Person.__name)

p1= Person()

print(p1.__name)

print(Person.__dict__['_Person__name'])

print(Person._Person__name) #只要类执行,将类的内容加载到内存时,发现有 __变量名这样的静态变量或方法,Python解释器自动将__变量名

#私有化后的静态变量或方法,类内部可以访问,父类以及类的外部不能访问。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值