程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

python cls與self的區別與聯系; class A: A與A() 與 a =A() 的區別與聯系 ;及實例空間與類空間的區別與聯系

編輯:Python

cls與self的區別與聯系

結論:A為類,地址與cls一樣,a為實例化對象,地址與self一樣 A()也為實例化對象它可以觸發__init_方法
(__init_魔法方法通過類加()觸發)
class A(object):
def sky(self):
print(id(self)) # 2839707071368
@classmethod
def person(cls):
return print(id(cls)) # 2839705905128
a = A()
print(id(a)) # 2839707071368
a.sky()
a.person()
print(id(A)) # 2839705905128
cls與self都是開辟實例化對象的空間
class A:
def __init__(self):
pass
def fun(self):
self.a = 1
print(self.__dict__)
# print(cls.__dict__)
print(A.__dict__)
def fuc(self):
self.b = 2
print(self.a)
print(self.b)
print(self.__dict__)
# print(cls.__dict__)
print(A.__dict__)
def func(cls):
cls.c=3
print(cls.c)
# print(self.__dict__)
print(cls.__dict__)
print(A.__dict__)
a=A()
a.fun()
a.fuc()
a.func()

A與A() 與 a =A() 的區別與聯系

""" 實例對象調用 類調用 訪問實例屬性 訪問類屬性 實例方法 1 0 1 1 類方 法 1 1 / 1 靜態方法 1 1 / 0 普通方法 0 1 / 0 https://blog.csdn.net/weixin_44259638/article/details/121318407 """
class A(object):
nation = "china" # 類屬性
def __init__(self): # 魔法方法 對實例化對象封裝屬性
self.province = "四川" # 實例屬性
# 1.實例方法 實例調用
def sky(self):
name = "phil"
# return print(self.province)
# print(id(self))
print("我是實例方法返回")
# 2.靜態方法 不需要參數 類和實例方法都可以調用
@staticmethod
def land():
age = 18
# return print(nation)
# return print(self.province)
print("我是靜態方法返回")
# 3.類方法 類和實例方法都可以調用
@classmethod
def person(cls):
cls.sex = "male" # 這是類屬性
return print(cls.nation)
# return print(id(cls))
# print("我是類方法返回")
# 4.普通方法quti
def normal():
print("我是普通方法返回")
# print()1
# 實例化方法 普通方法不能調用 訪問屬性時先訪問時,先訪問實例屬性訪問類屬性
a = A()
# a.sky() # 結果: 我是實例方法返回
# a.land() # 結果: 我是靜態方法返回
a.person() # 結果: 我是類方法返回
# a.normal() # 運行報錯 因為普通方法需要self 參數
# 類調用 實例方法不可調用
# A.sky() # 運行實例方法出錯
# A.land() # 結果: 我是靜態方法返回
# A.person() # 結果: 我是類方法返回
# A.normal() # 結果: 我是普通方法返回
# print(A.province) 不能訪問實例屬性
# A() 普通方法不能調用
# A().person() # 1
# A().land() # 1
# A().sky() # 1
# A().normal() # 0
# print(A().province) # 四川 可以訪問實例屬性 可以把它當作實例化
# a = A()
# print(id(a))
# a.sky()
# a.person()
# print(a.__dict__)

實例空間與類空間的區別與聯系

class Test:
a = 1
def test(self):
print(self.a) # 在實例空間的屬性中找不到a,就去類空間找,找到了為 1
self.a += 2 # 在實例空間創建a屬性,初始值為 3
print(self.a) # 實例空間找到了a屬性為 3
print(Test.a) # 1 類屬性a為1
b = Test()
b.test() # 1 3
print(b.a) # 3 實例空間找到了a屬性為 3
print(Test.a) # 類空間的 a 還是 1

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved