命名空间

# 命名空间
# python中一切皆对象
# 所有的对象都有一个类型
# []的类型是list
# {}的类型是dict
# #函数也是类型
# def abc():pass
# print(type(abc)) #<class 'function'>
class A: #类的创建,开辟一个空间存放属性和方法,最后把地址返回给A
    str1 = 'aaa' #str1 是静态变量/静态属性 (C++ 里的static)
    def __init__(self):pass
    def func1(self):print(self)
    def func2(self):pass
    str1 = 'bbb'
print(id(A)) # 2273561627248 类的地址
print(id(A.str1)) #2209808840368 类的静态变量str1 的地址
print(list.__dict__) #__dict__ 显示所有属性和方法
A.func1(1) #结果func1 打印了1  用类名加点调用类的方法,把1 传给了func1方法中的self,一般不用类名调用,用对象的方式调用
a=A() #效果和A.func1(a)是一样的
a.func1() #<__main__.A object at 0x0000020230804C70>
# #当用a=A() 创建对象的时候 开辟a一个内存空间,其中存了类A的指针,
a=A()
print(id(A.str1)) #2600431122288
print(id(a.str1)) #2600431122288  #这2个地址是一致的
# #a对象在创建的时候开辟的空间里没有存放str1变量,但是可以通过类指针在类A的空间里找
#类中的变量是静态变量
#对象中的变量只属于对象本身,每个对象有属于自己的空间来存储对象的变量
#当使用对象名去调用某一个属性的时候会优先在自己的内存空间中找,找不到再去类的空间中找
#如果自己没有,就引用类的,类也没有就报错
#对于类来说,类中的变量所有的对象都是可以读取的,并且读取的是同一个值
# #实现一个类,可以自动统计这个类实例化了多少个对象
class A:
    count = 0
    def __init__(self):
        A.count+=1
a=A()
b=A()
c=A()
print(A.count) # 3  实例化了3次

类中静态变量的用处

#类中静态变量的用处
#如果一个变量,是所有的对象共享的值,那么这个变量应该被定义成静态变量
#所有和静态变量相关的增删改查都应该用类名A来处理,而不应该用对象a来处理

组合

#组合
#一个类的对象是另一个类的对象的属性
#练习
#班级类Grade 包含一个属性课程course
#课程类Course 包含 课程名称 name 周期 period 价格price
#创建2个班级:g1 g2
#查看g1班所学课程的价格
#查看g2班所学课程的周期
class Grade:
    def __init__(self,course):
        self.course = course
class Course:
    def __init__(self,name,period,price):
        self.name = name
        self.period = period
        self.price = price

c1 = Course('g1','20200701-20201231',15000)
c2 = Course('g2','20210701-20211231',25000)
g1 = Grade(c1)
g2 = Grade(c2)
print(g1.course.price)
print(g2.course.period)
#练习【未完成】:基于圆形类实现一个环类,接受参数为大圆R和小圆半径r
#实现方法:计算环形面积和环形周长
#借助组合,要求组合圆形类的对象完成需求
posted on 2020-07-29 22:17  94小渣渣  阅读(62)  评论(0编辑  收藏  举报