文章目录
组合
什么是组合:
组合指的是一个对象中,包含一个或多个对象
为什么使用组合:
减少代码冗余,降低耦合度
如何使用组合:
继承:继承是类与类的关系,子类继承父类的属性/方法,子类与父类是一种从属关系。
组合:组合是对象与对象的关系,一个对象拥有另一个对象中的属性/方法,是一种什么有什么的关系
演示:
#人类
class People:
def __init__(self,name,age,sex):
self.name = name
self.age = age
self.sex = sex
#老师类
class Teacher(People):
def __init__(self,name,age,sex):
super().__init__(name,age,sex)
#学生类
class Student(People):
def __init__(self,name,age,sex):
super().__init__(name,age,sex)
#日期类
class Date:
def __init__(self,year,month,day):
self.year = year
self.month = month
self.day = day
def tell_birth(self):
print(f'''
==出生年月日==
年:{self.year}
月:{self.month}
日:{self.day}
''')
stu = Student('redwei',21,'male')
date_obj = Date(1998,4,7)
stu.date_obj = date_obj
stu.date_obj.tell_birth()
封装
什么是封装
封:比如将一个小袋子,封起来
装:比如将一堆小猫小狗和tank装在袋子里
封装指的是可以将一堆属性和方法,封装到到对象中
ps:对象就好比一个‘袋子/容器’,可以存放一堆属性和方法。
ps:存不是目的,取才是目的,可以通过‘对象.’的方式获取属性或方法
为什么使用封装
可以通过‘对象.’的方式‘存放/获取’属性或方法
可以拥有‘.’的机制
方便存取数据
怎么用封装
class User:
x = 10
def func():
pass
obj = User()
obj.y = 20
obj---> x,func,y
访问限制机制
什么是访问限制机制:
凡是在类内部定义的属性或方法,以–开头的属性或方法名,都会被限制,外部不能直接访问该属性的原型。
python特有:凡是在类内部定义–开头的属性或方法,都会变形为–类名–属性/方法。
为什么要有访问限制:
将一些隐私的数据,隐藏起来,不让外部轻易获取。
可以将一堆数据封装成一个接口,可以让用户调用接口。
并且通过相应的逻辑,最后将数据返回给用户
如何实现:
class ATM:
def __insert_card(self):
print('插卡')
pass
def __input_pwd():
print('输入密码')
pass
def __input_bal(self):
print('输入取款金额')
pass
def __withdraw_cost(self):
print('取款')
pass
def __print_flow(self):
print('打印回执单')
pass
def withdraw(self):
self.__insert_card()
self.__input_pwd()
self.__input_bal()
self.__with_cost()
self.__print_flow()
atm_obj = ATM()
#直接调用不能拿到数据
#必须通过其他接口
atm_obj.withdraw
property
什么是property
property是一个内置的装饰器,可以装饰在类’内部的方法’上.
可以将该方法调用方法由–>对象.方法()–>对象.方法
为什么使用property
在某些场景下,调用的方法只是用来获取计算后的的某个值.
必须通过 对象.方法() 方式调用,让方法看起来像动词
让名词的方法,调用时更为合理,目的是为了,迷惑调用者,调用的方法误以为是属性
如何用
class User:
def __init__(self,name,weight,height):
self.__name = name
self.weight = weight
self.height = height
@property
def bmi(self):
return self.weight/(self.height**2)
@property
def name(self):
return self.__name
@name.setter
def name(self,value):
self.__name = value
@name.deleter
def name(self):
del self.__name
user_obj = User('redwei',100,1.65)
print(user_obj.bmi)