Einführung in öffentliche Eigenschaften von Klassen

巴扎黑
Freigeben: 2017-07-17 15:58:06
Original
1535 Leute haben es durchsucht

1. Konzept

Wir haben bereits die privaten Attribute einer Klasse erwähnt, auf die nicht direkt in der Klasse zugegriffen werden kann. Was aber, wenn Eigenschaften, auf die direkt zugegriffen werden kann, öffentliche Eigenschaften sind? Nicht wirklich. Die Eigenschaften im __init__()-Konstruktor sind grundsätzlich für die Außenwelt zugänglich, sie sind jedoch keine öffentlichen Eigenschaften. Was sind also öffentliche Attribute?

Definition: Bezieht sich auf Eigenschaften, auf die alle zu dieser Klasse gehörenden Objekte zugreifen können, sogenannte öffentliche Eigenschaften.

2. Attribute

2.1 Mitgliederattribute

class Person(object):

    def __init__(self, name, job, phone, address):
        self.name = name    #  成员属性,属于某个实例对象
        self.job = job
        self.phone = phone
        self.__address = address

    def get_private(self):
        return self.__address

    def sayhi(self):
        print("hell,%s" % self.name)

p1 = Person('Bigberg', 'Doctor', '8833421', 'hz')
p2 = Person('Ashlex', 'Police', '8833232', 'bj')
Nach dem Login kopieren
print(p1.job, p2.job)

# 输出
Doctor Police
Nach dem Login kopieren

Wir sind Hier sind zwei Objekte unter der Person-Klasse definiert, p1 und p2. Offensichtlich haben wir für p1 keine Möglichkeit, auf das Jobattribut von p2, also Police, zuzugreifen. Dann werden Attribute wie self.name im Konstruktor __init__() als Mitgliedsattribute bezeichnet.

2.2 Öffentliche Attribute

class Person(object):
    nationality = 'CN'   # 定义公有属性

    def __init__(self, name, job, phone, address):
        self.name = name
        self.job = job
        self.phone = phone
        self.address = address

    def sayhi(self):
        print("hell,%s" % self.name)

p1 = Person('Bigberg', 'Doctor', '8833421', 'hz')
p2 = Person('Ashlex', 'Police', '8833232', 'bj')

print(p1.nationality)
print(p2.nationality)

# 输出

CN
CN
Nach dem Login kopieren

Bei öffentlichen Attributen handelt es sich um den Wert, den alle darauf zugreifenden Instanzobjekte erhalten Dasselbe.

 

3. Eigenschaften öffentlicher Attribute

Wir können nicht nur auf öffentliche Attribute zugreifen, sondern diese auch ändern.  

class Person(object):
    nationality = 'CN'   # 定义公有属性

    def __init__(self, name, job, phone, address):
        self.name = name
        self.job = job
        self.phone = phone
        self.address = address

    def sayhi(self):
        print("hell,%s" % self.name)

p1 = Person('Bigberg', 'Doctor', '8833421', 'hz')
p2 = Person('Ashlex', 'Police', '8833232', 'bj')

print(Person.nationality)  # 调用 公有属性
Person.nationality = 'us'   # 改变 公有属性
print(Person.nationality)

#输出

CN 
us
Nach dem Login kopieren

 

3.1 Aufrufen und Ändern öffentlicher Eigenschaften in einer einzelnen Instanz

# 依据上例

print("--------Befoer change---------")
print(Person.nationality)
print(p1.nationality)
print(p2.nationality)

print("--------after change---------")
print(Person.nationality)
p1.nationality = 'JP'
print(p1.nationality)
print(p2.nationality)


# 输出
Nach dem Login kopieren

--------Vor der Änderung---------
CN
CN
CN
--------nach der Änderung------ ---
US
JP
US

Wir können p1 sehr gut verstehen, bevor wir es ändern, da jeder das öffentliche Attribut Nationalität der Klasse Person nennt, also p1, The Die Nationalitätsattribute von p2 sind gleich, beide sind „CN“. Aber warum hat sich das Nationalitätsattribut von p2 nicht geändert, nachdem p1 das öffentliche Attribut geändert hat? enthält auch die öffentlichen Eigenschaften dieser Klasse. Wenn die anfängliche Instanz p1 das Nationalitätsattribut der Klasse Person aufruft, verweist sie direkt auf die Speicheradresse der Nationalität in der Klasse, anstatt ein neues Attribut namens Nationalität hinzuzufügen.

Wie unten gezeigt:

Dies kann erklären, warum sich auch p2 ändert, wenn die Nationalität in der Personenklasse in „US“ geändert wird. Weil es direkt auf den Wert im Speicher verweist.

 
print(id(Person.nationality))
print(id(p1.nationality))
print(id(p2.nationality))
print(Person.nationality, p1.nationality, p2.nationality)

#输出
1751236836128
1751236836128
1751236836128
CN CN CN
Nach dem Login kopieren

Nachdem p1 das Nationalitätsattribut direkt zugewiesen hat, fügt Instanz p1 tatsächlich eine neue Mitgliedsvariable namens Nationalität zu sich selbst hinzu. Es ist nur so, dass ihre Namen gleich sind, aber es gibt keinen Zusammenhang zwischen den beiden und sogar die Speicheradressen sind unterschiedlich.

p1.nationality = 'JP'
Nach dem Login kopieren

p1.nationality='JP' ändert also nicht die öffentlichen Attribute der Person-Klasse, sondern erstellt ein neues Mitgliedsattribut für sich selbst, sodass die Änderung von p1 öffentlich ist Eigenschaften der Klasse haben keine Auswirkung.

# p1.nationality = 'JP'
print(id(Person.nationality))
print(id(p1.nationality))
print(id(p2.nationality))
print(Person.nationality, p1.nationality, p2.nationality)

#输出
2434579585096
2434579585152
2434579585096
US JP US
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonEinführung in öffentliche Eigenschaften von Klassen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!