封装:
为什么要隐藏属性:
----------------------------------------------------------------------------------------
目的的是为了隔离复杂度,例如ATM程序的取款功能,该功能有很多其他功能组成,
比如插卡、身份认证、输入金额、打印小票、取钱等,
而对使用者来说,只需要开发取款这个功能接口即可,其余功能我们都可以隐藏起来
----------------------------------------------------------------------------------------
>>> class ATM:
... def __card(self): #插卡
... print('插卡')
... def __auth(self): #身份认证
... print('用户认证')
... def __input(self): #输入金额
... print('输入取款金额')
... def __print_bill(self): #打印小票
... print('打印账单')
... def __take_money(self): #取钱
... print('取款')
... def withdraw(self): #取款功能
... self.__card()
... self.__auth()
... self.__input()
... self.__print_bill()
... self.__take_money()
...
>>> obj=ATM()
>>> obj.withdraw()
property:
property是一个装饰器,是用来绑定给对象的方法伪造成一个数据属性(调用对象不用加括号调用)
案例一:
class People:
def __init__(self,name,weight,height):
self.name = name
self.weight = weight
self.height = height
#定义函数的原因1:
#1.从bmi公式上看,bmi听该是触发功能计算得到的
#2.bmi是随着身高体质变化而动态变化的,不是一个固定的值,每次需要临时计算
@property #把功能转化为数据属性
def bmi(self):
return self.weight/(self.height**2)
obj1 = People('whx',70,170)
print(obj1.bmi) #0.002422145328719723
案例二(老操作):
class People():
def __init__(self,name):
self.__name = name
def get_name(self):
return self.__name
def set_name(self,val):
if type(val) is not str:
print('必须传入str类型')
return
self.__name = val
def dle_name(self):
print('不让删除')
name = property(get_name,set_name,dle_name)
obj1 = People('whx')
print(obj1.name) #get_name 查看
obj1.name = 'hello' #set_name 修改
del obj1.name #del_name 删除
案例三(常用操作***):
class People():
def __init__(self,name):
self.__name = name
@property #就相当于进行了name = propert(name)操作
def name(self): #get_name
return self.__name
@name.setter
def name(self,val): #set_name
if type(val) is not str:
print('必须传入str类型')
return
self.__name = val
@property.deleter
def name(self): #del_name
print('不让删除')
obj1 = People('whx')
print(obj1.name) #get_name 查看
obj1.name = 'hello' #set_name 修改
del obj1.name #del_name 删除
继承:
1.子类会遗传父类的属性
#继承是一种创建新类的方式,
#在Python中,新建的类可以继承一个或多个父类,
#新建的类可称为子类或派生类,父类又可称为基类或超类
2.如果多个类有共同的功能或者属性,
那么可以放在同一个父类中存放,可以解决类与类代码冗余的问题
(类是解决对象之间代码冗余的问题)
3.如果没有继承任何类,那么会默认继承object类,所以python3所有类都是新式类
多继承还有可能有可能会引发菱形问题
继承的示范:
如果父类有score对象 那么子类想要添加新的参数的话
OldboyPeople.score(self,name)
标签:__,...,封装,name,self,面向对象,def,print,三大 From: https://www.cnblogs.com/whxx/p/17234836.html