我就廢話不多說了,還是直接看**吧!
# -*- coding:utf-8 -*-
#面試題,寫乙個方法,將一行字串中所有的單詞數量統計出來
class person(object):
tag = "hello"
p1 = person()
p2 = person()
print p1.tag #第一種賦值方式
print p2.tag
print person.tag #第二種賦值方式
p1.tag = "damn it"
print p1.tag
print p2.tag
print person.tag
輸出結果:可以看到,只有p1的tag,被賦值成了新的"damn it"
hello
hello
hello
damn it
hello
hello
如何將所有物件引用的類變數都賦值成同乙個值呢?
person.tag = "damn it"
輸出結果:完美解決問題
hello
hello
hello
damn it
damn it
damn it
補充知識:python類,賦值,命名空間
python中的類相當於乙個命名空間,object.attr 就是乙個向上爬屬性的過程
屬性:__dict__ , __class__ , __bases__
__dict__: 例項或類或模組的屬性 , __class__ 例項對應的類物件,__bases__(元組):父類/超類
爬屬性:
def findattr(obj , attr):
if attr in obj.__dict__:
return obj.__dict__[attr]
cls = obj.__class__
if attr in cls.__dictxmkxdqizpj__:
return cls.__dict__[attr]
for super_cls in cls.__bases__:
if attr in super_cls.__dict__:
return super_cls.__dict__[attr]
return none
爬類:def classtree(cls,indent):
prxmkxdqizpjint('.'*indent + cls.__name__)
for super_cls in cls.__bases__:
classtree程式設計客棧(super_cls,indent+4)
賦值方式:
class test:
static_var = 1 #類屬性相當與c++靜態成員變數
def assign(self):
self.x = 1 #物件屬性賦值
t = test()
t.x = 2 #也可以這樣 ,直接賦值
t.__dict__['x'] = 3 #也可以這樣 , __dict__是物件空間詞典,每個物件乙份,類物件/模組也有
test.add_static_var = 5 #也可以樣新增乙個類屬性
類方法呼叫 , 常用的方式object.method() ,在python中擴充套件 class.method(object) ,兩者相同
test.assign(t)
print(t.x)
當object.method() 時,object被傳入method(self)中的第乙個引數.class.method(object) 需要手動傳入
命名空間:
x = 0
def print_global():
print(x) #列印全域性
def print_local():
x = 1
print(x) #本地變數
class a:
x = 2 #類屬性==c++靜態成員變數 , print a.x
def m(self):
x = 3 #本地變數
self.x = 4 #物件屬性
def change_global():
global x #修改全域性變數,否則x = 100 ,是增加乙個本地變數
x = 100
def print_enclosing():
x = 200
def nested():
print(x) #在閉包中引用本地變數
def change_in_enclosing():
x = 1
def nwww.cppcns.comested():
nonlocal x
x = 2 #在閉包中改變本地變數, 如沒有nonlocal x , 在又新增乙個本地變數
本文標題: python之關於類變數的兩種賦值區別詳解
本文位址: /jiaoben/python/302819.html
類的兩種引入方式
一種是通過 import方式引入 另一種是通過 class引入 這兩種的方式的區別在於 1 import方式會包含被引用類的所有資訊,包括被引用類的變數和方法 class方式只是告訴編譯器在a.h檔案中 b b 只是類的宣告,具體這個類裡有什麼資訊,這裡不需要知道,等實現檔案中真正要用到時,才會真正...
關於C 兩種排序
學習了選擇排序與氣泡排序後,以我目前的水平認為,選擇排序和氣泡排序的結果上,其實都是將整數型或浮點型的數排成有序數列的演算法,即將數從大到小或從小到大排列。但是,它們使數排成有序數列的過程,是有不同的,於是我就有個疑問,它們實現排序的效率有何不同呢。以下分別是是關於選擇排序與氣泡排序的 選擇排序 i...
關於兩種限流模式
流量預警和限流方案中,比較常用的有兩種。第一種滑窗模式,通過統計一段時間內的訪問次數來進行控制,訪問次數達到的某個峰值時進行限流。第二種為併發使用者數模式,通過控制最大併發使用者數,來達到流量控制的目的。下面來簡單分析下兩種的優缺點。1 滑窗模式 模式分析 在每次有訪問進來時,我們判斷前n個單位時間...