2018年12月13日 星期四

python - 類和對象命名空間

類里可以定義兩種屬性
1.靜態屬性
2.動態屬性

class   Course :
    language = ['Chinese']
    def __init__(self,teacher,course_name,period,price):
        self.teacher = teacher
        self.name = course_name
        self.period = period
        self.price = price

    def func(self):
        pass
Course.language = 'English'#Course.__dict__['language'] = 'Chinese'print(Course.language)

python = Course('egon','python','6 months',20000)
linux = Course('egon','python','6 months',20000)
['chinese']

python.language = ''print(python.language)
print(linux.language)
python.language = 'Chinese'print(python.language)
print(linux.language)



del python.language
print(python.language)
print(python.__dict__)
print(Course.language)
print(linux.language)
print(linux.__dict__)
執行結果:
English

English
Chinese
English
English
{'teacher': 'egon', 'name': 'python', 'period': '6 months', 'price': 20000}
English
English
{'teacher': 'egon', 'name': 'python', 'period': '6 months', 'price': 20000}

類中的靜態變量 可以被對象和類調用
對於不可變數據類型來說,類變量最好用類名操作
對於可變數據類型來說,對象名的修改是共享的,重新賦值是獨立的

#模擬人生class Person:
    money = 0    def work(self):
        Person.money += 1000
mother =  Person()
father =  Person()
Person.money += 1000Person.money += 1000print(Person.money)
mother.work()
father.work()
執行結果:
2000



#創建一個類,每實例化一個對象就計數#最終所有的對象共享這個數據
class  Foo:
    count = 0    def __init__(self):
        Foo.count += 1
    
f1 =  Foo()
f2 =  Foo()
print(f1.count)
print(f2.count)
f3 = Foo()
print(f1.count)
執行結果:
2
2
3


#認識綁定方法def  func(): passprint(func)

class Foo:
    def func(self):
        print('func')
    def func1(self):
        pass
f1 = Foo()
print(Foo.func)
print(f1.func)
print(f1.func1)
#<bound method Foo.func of f1>

執行結果:
<function func at 0x00F007C8>
<function Foo.func at 0x0339B858>
<bound method Foo.func of <__main__.Foo object at 0x03371810>>
<bound method Foo.func1 of <__main__.Foo object at 0x03371810>>

#包--__init__import  package
import  time
time.time()


#類裡的名子有  類變量(靜態屬性) +  方法名(動態屬性)#對象裡的名子  對象屬性#對象 -- >  類#對象找名子 :  先找自己的找   >> 找類裡面的 >>在找不到就報錯#對象修改靜態屬性的值   #對於不可變數具類型來說,對象名的修改是共享的,重新腹值是獨立的












沒有留言:

張貼留言