今天是面向对象第二天
昨天主要讲的
封装 继承 多态
封装就是 归类,归类将函数放置到一个类中 打包,将数据打包放到一个对象。
继承没什么说的,先找自己的,在从左往右找
就是在继承里有个self 的事
self参数是py帮助我们自动传递。
如果执行面线对象中的方法时,前面必须有一个对象:xxx。函数名()
还有一个小技能 归类+提取公共值
多态,py原生支持多态,崇尚鸭子模型,由于py函数传参时,无序指定类型:
def func(a) a可以时多种类型,只要其中有send方法即可。
a。send()
py支持 多继承
第二天,1成员 2,嵌套(建模)
1,类的成员
class foo:
方法
def __init__(self,name):
实例变量/字段
self.name=name
方法
def func(self):
pass
obj。foo类的对象
obj。foo类的实例
obj=foo(‘aaa’)
成员分为3类:
变量:
实例变量(字段)
公有实例变量(字段)
私有实例变量(字段)
类变量(静态字段)
公有类变量(静态字段)
私有类变量(静态字段)
class foo:
类变量(静态字段)
country=‘a’
def __init__(self,name):
实例变量(字段)
self。name=name
def func(self):
pass
obj1=foo(‘a’)
obj2=foo(‘b’)
foo。country
方法
实例方法
class foo(xx):
def __init__(self,name):
self.name=name
实例方法
def func(self):
print(self.name)
obj=xx(‘aa’)
obj。func()
静态方法
class foo(xx):
def__init__(self,name):
self。name=name
静态方法,如果方法无需使用对象中封装的值,那么就可以使用静态方法
@staticmethod
def display(a1,a2):
return a1+a2
foo。display(1,3)
类方法 这两个@后的单词是固定的
class foo(object):
类方法,cls是类
@ classmethod
def show(cls,x1,x2):
print(cls,x1,x2)
执行类方法
foo。show(1,8)
属性(通过方法改造出来):
总结:
1.编写时
-方法上方写@property
-方法参数:只有一个self
2.调用时:无需加括号 对象。方法 这个和staticmethod一样,只是这个能传值,property不能
3.引用场景。对于简单的方法,当无需传参且有返回值时,可以使用@property
嵌套
面向对象
class school (obj)
def __init__(self, name, address):
self.name = name
self.address = address
def speech(self):
print('讲课')
obj1 = School('老男孩北京校区', '美丽富饶的沙河')
obj2 = School('老男孩上海校区', '浦东新区')
obj3 = School('老男孩深圳校区', '南山区')
class Teacher(object):
def __init__(self, name, age, salary):
self.name = name
self.age = age
self.__salary = salary
self.school = None
t1 = Teacher('李杰', 19, 188888)
t2 = Teacher('艳涛', 18, 60)
t3 = Teacher('女神',16, 900000)
# ############## 老师分配校区
t1.school = obj1
t2.school = obj1
t3.school = obj2
# ####################################
# 查看t1老师,所在的校区名称/地址
print(t1.school.name)
print(t1.school.address)
print(t1.name)
print(t1.age)
t1.school.speech()
这个就是互相调用,好绕,感觉会用的多
准则 字段和方法的归类,