python 面向对象:
(思维导图 ↑↑↑↑)
类的成员:
成员分为三类:
变量:
- 实例变量(字段)
-公有实例变量(字段)
-私有实例变量(字段)
- 类变量(静态字段)
-公有类变量(静态字段)
-私有类变量(静态字段)
实例一:
class Foo: # 类变量(静态字段) country = "中国" def __init__(self, name): # 实例变量(字段) self.name = name def func(self): pass obj1 = Foo('裴杰') obj2 = Foo('裴狗子') print(Foo.country)
准则:
实例变量(字段)访问时,使用对象访问,即: obj1.name
类变量(静态字段)访问时,使用类方法,即: Foo.country (实在不方便时,才使用对象)
练习1 obj1.name = 'alex' print(obj1.name) # alex print(obj2.name) # 裴狗子 练习2 obj1.country = '美国' print(obj1.country) # 美国 print(obj2.country) # 中国 练习3 Foo.country = '美国' print(obj1.country) # 美国 print(obj2.country) # 美国
方法:
- 实例方法
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)
属性(通过方法改造出来)
示例:
class 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
组合(建模)
面向对象:
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('裴杰', 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()