[英]Access class variables from another class
我有一個簡單的類A,它從用戶那里獲取名稱。
class A:
def __init__(self, name = ''):
self.name = name
然后,我想創建一個打印此名稱的類B。 我試過了:
class B:
def print_name(printing_name = A.name):
print(printing_name)
然后我調用這些方法:
m1 = A("x")
B.print_name(m1)
這將返回錯誤
Traceback (most recent call last):
File "so.py", line 5, in <module>
class B:
File "so.py", line 7, in B
def print_name(printing_name = A.name):
AttributeError: class A has no attribute 'name'
我知道我沒有在類A中分配類變量,因此name屬性與特定實例一起使用,而不是與整個類一起使用。 但是,名稱屬性必須與每個特定實例連接,因為它隨情況而變化。 那我該如何在B類中獲得這個名字?
將您的class B
更改為:
class B:
@staticmethod
def print_name(obj):
print(obj.name)
print_name
方法可能應該修飾為“靜態方法” 。 self
的屬性“ name
”是一個實例屬性,不能直接從類本身進行引用。
沒錯: name是實例屬性,而不是類屬性。 在這種情況下, m1有一個名稱,但類A沒有。 您需要訪問輸入參數的名稱,而不是嘗試打印類屬性。
您還需要使B.print_name成為類函數,因為您不是從B的實例調用它。
class B:
@staticmethod
def print_name(inst):
print(inst.name)
輸出:
x
編輯:如果您了解@staticmethod
的答案,那么它是理想的選擇。
class A:
def __init__(self, name = ''):
self.name = name
class B:
def __init__(self):
pass
def print_name(self, var):
print (var.name)
輸出:
>>> m1 = A("X")
>>> b = B()
>>> b.print_name(m1)
X
>>>
在這種情況下,A是類的名稱,您不應將其作為調用print_name
方法的默認參數。 看一下Python的關鍵字參數,您會發現實際上編寫的內容意味着您已將默認值設置為A類的.name
屬性,除非實例化該類(否則,否則該對象不存在)是由該類創建的)。
您的B
課應為:
class B:
def print_name(printing_object):
print(printing_object.name)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.