python's eithteenth day for me 面向对象——命名空间
创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些明细称为类的属性。
而类有两种属性:静态属性和动态属性:
1,静态属性就是直接在类中定义的变量。
2,动态属性就是定义在类中的方法。
类的属性是共享给所有对象的。
class Person: role = 'person' def __init__(self,name): self.name = name def func(self): print(666) p1 = Person('顾清秋') p2 = Person('懒笨呆') print(p1.role) # person print(p2.role) # person p1.func() # 666 p2.func() # 666 # 对象 p1 和 p2是都可以调用 role(静态属性) 和 func 方法的 所以类中的属性是共享给所有对象的。
创建一个对象(实例)就会创建一个对象(实例)的名称空间,存放对象(实例)的名字,成为对象(实例)的属性。
对象使用名字:先找自己内存空间中的,再通过类对象指针找到类,再找类的内存空间的。
对象的内存空间里只存储对象的属性,而不存储方法和静态属性。
方法和静态属性都存储在类的内存空间中,为了节省内存,让多个对象去共享类中的资源。
对于静态属性的修改,应该使用 类名.静态属性名直接修改。
class Person: money = 0 # 静态属性 def __init__(self,name): self.name = name def work(self): print(self.name,'工作,赚了1000块钱') Person.money += 1000 # 直接使用 类名.静态属性名 father = Person('father') # mother 工作,赚了1000块钱 mother = Person('mother') # father 工作,赚了1000块钱 mother.work() father.work() print(Person.money) # 2000
写一个功能,可以统计创建过几个对象:
class Person: count = 0 def __init__(self): Person.count += 1 p1 = Person() p2 = Person() p3 = Person() print(Person.count) # 3 # 创建一个对象(实例)就会执行一次 __init__方法。
# 圆
# 半径为(1,3,5,7,9)
# 计算圆的周长
# 计算圆的面积
from math import pi # 导入 pi 模板 class Circle: def __init__(self,r): self.r = r def circle_area(self): # 计算圆面积的函数 return pi*self.r**2 def circle_perimeter(self): # 计算圆周长的函数 return pi*self.r*2 for i in range(1,10,2): c1 = Circle(i) # 创建 c1 对象 print(c1.circle_area()) # 调用圆面积方法 print(c1.circle_perimeter()) # 调用圆周长方法