当前位置: 移动技术网 > IT编程>脚本编程>Python > Python面向对象--高级(二)

Python面向对象--高级(二)

2018年07月02日  | 移动技术网IT编程  | 我要评论

大清娱乐圈,英山房价,安又奇

## 使用__slots__限制类的属性
  - 之前说到,可以通过在类外部实例或者类名任意定义实例属性或者类属性或者方法

 1 class Person(object):
 2     pass
 3 
 4 
 5 Person.name = "Stanley"         # 在外部添加类属性
 6 print(Person.name)              # 输出:Stanley
 7 
 8 per1 = Person()
 9 per1.age = 22                   # 在外部添加实例属性
10 print(per1.age)                 # 输出:22
11 
12 per2 = Person()
13 # print(per2.age)               # 实例属性只由定义该属性的实例所有,其他的实例无法访问
14 
15 
16 def outer_init(self, name):
17     self.name = name
18 
19 
20 Person.__init__ = outer_init    # 在外部修改类方法
21 per3 = Person("Lily")
22 print(per3.name)                # 输出:Lily, 说明类方法修改成功

 

  - 若想要限制实例的属性,可以使用__slots__

 1 class Person(object):
 2     __slots__ = ("name", "age")     # 限制实例属性
 3     count = 1
 4 
 5 
 6 Person.nationality = "China"        # 仍然可以定义类属性
 7 print(Person.nationality)           # 输出:China
 8 
 9 
10 per1 = Person()
11 per1.name = "Lily"
12 per1.age = 17
13 
14 per1.nationality = "China"
15 # 类属性为只读属性,无法通过实例修改,只能通过类名修改
16 # AttributeError: 'Person' object attribute 'nationality' is read-only
17 
18 per1.gender = "female"
19 # 无法通过实例定义新实例属性
20 # AttributeError: 'Person' object has no attribute 'gender'
21 
22 
23 per1.count = 100
24 # AttributeError: 'Person' object attribute 'count' is read-only

 

## 多重继承
  - Python是允许多重继承的,多重继承时代子类拥有多重特征

 1 class Person(object):
 2     @staticmethod
 3     def pursuit_happiness():
 4         print("幸福是奋斗出来的!")
 5 
 6 
 7 class Father(Person):
 8     character = "温和,坚韧"
 9 
10 
11 class Mather(Person):
12     interest = "阅读,文艺竞技"
13 
14 
15 class Student(Person):
16     @staticmethod
17     def do_homework():
18         print("是学生就要做作业!")
19 
20 
21 class Son(Father, Mather, Student):     # 多重继承
22     pass
23 
24 
25 s = Son()
26 # Son类实例具有了Father类的属性
27 print(s.character)              # 输出:温和,坚韧
28 # Son类实例具有了Mather类的属性
29 print(s.interest)               # 输出:阅读,文艺竞技
30 # Son类实例具有了Student类的方法
31 s.do_homework()                 # 输出:是学生就要做作业!
32 # 由于Father类,Mather类,Student类都各自继承了Person类,所以Son类也有Person类的方法
33 s.pursuit_happiness()           # 输出:幸福是奋斗出来的!

 

  - 类的组合使用

 1 class Car(object):
 2     def __init__(self, color, owner):
 3         self.color = color
 4         self.owner = owner
 5 
 6 
 7 class House(object):
 8     def __init__(self, location, owner):
 9         self.location = location
10         self.owner = owner
11 
12 
13 class Person(object):
14     def __init__(self, name, car=None, house=None):
15         self.name = name
16         self.car = car
17         self.house = house
18 
19 
20 per1 = Person("Stanley")        # 实例化Person
21 c = Car("Black", per1)          # 实例化Car
22 h = House("China", per1)        # 实例化House
23 per1.car = c                    # 把实例化的car给per1
24 per1.house = h                  # 把实例化的house给per1
25 
26 # 通过person访问car的属性
27 print(per1.car.color)           # 输出:Black
28 # 通过person访问house的属性
29 print(per1.house.location)      # 输出:China
30 # 通过house和car访问person的属性
31 print(h.owner.name)             # 输出:Stanley
32 print(c.owner.name)             # 输出:Stanley

 

本文参考:

  [美]Bill Lubanovic 《Python语言及其应用》
  https://www.liaoxuefeng.com 廖雪峰的官方网站 

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网