1. 成员
1.类的成员
class Foo: # 方法 def __init__(self,name): # 实例变量/字段 self.name = name # 方法 def func(self): pass # obj,Foo类的对象 # obj,Foo类的实例 obj = Foo('周润发')
成员共分为三类:
变量:
实例变量(字段)
-公有实例变量(字段)
-私有实例变量(字段 )
类变量(静态字段)
-公有类变量(静态字段)
-私有类变量(静态字段)
实例一:
class Foo: # 类变量(静态字段) country = "中国" def __init__(self,name): # 实例变量(字段) self.name = name def func(self): pass obj1 = Foo('杨过') obj2 = Foo('小龙女') Foo.country
思考题:如何验证儿子都不知道私有字段的存在
无法访问:
class Base(object): __secret = "受贿" class Foo(Base): def func(self): print(self.__secret) print(Foo.__secret) obj = Foo() obj.func()
可以访问:
class Base(object): __secret = "受贿" def zt(self): print(Base.__secret) class Foo(Base): def func(self): print(self.__secret) print(Foo.__secret) obj = Foo() obj.zt()
方法:
-实例方法
# class Foo(object): # def __init__(self,name): # self.name = name
#实例方法 # def func(self): # print(self.name) # obj = Foo('方法') # obj.func()
-静态方法
class Foo(object): 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)
面试题: 静态方法/ 类方法和实例方法的区别?
属性(通过方法改造出来):
示例:
ss Foo(object): def __init__(self): pass @property def start(self): return 1 @property def end (self): return 10 obj = Foo() print(obj.start) print(obj.end)
总结:
1. 编写时
- 方法上方写 @property
- 方法参数:只有一个self
2. 调用时:无需加括号 对象.方法
3. 应用场景: 对于简单的方法,当无需传参且有返回值时,可以使用 @property
2.嵌套(建模)
面向对象:
创建三个学校且三个学校的设施内容等都是一致.
class School(object): 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('徐帆',18,10000000) t2 = Teacher('彦涛',28,100000) t3 = Teacher('女神',17,10000)
# 老师分配校区 t1.school = obj1 t2.school = obj1 t3.school = obj3
#查看t2老师,所在的校区名称/地址 print(t2.school.name) print(t2.school.address) print(t2.name) print(t2.age) t1.school.speech()
准则: 字段和方法的归类
可以继续总结