• 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())    # 调用圆周长方法
  • 相关阅读:
    MySQL数据库:数据完整性及约束的应用
    MySQL数据库:运算符
    MySQL数据库:合并结果集
    MySQL数据库:聚合函数的使用
    spring web mvc环境搭建
    golang中type常用用法
    有些事情,你真的要早点明白
    一个小事例,了解golang通道阻塞模式
    golang中,slice的几个易混淆点
    作为面试官的一点小感想
  • 原文地址:https://www.cnblogs.com/stfei/p/8796394.html
Copyright © 2020-2023  润新知