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())    # 调用圆周长方法
原文地址:https://www.cnblogs.com/stfei/p/8796394.html