有关类的公有属性的介绍
一、概念
我们前面提到类的私有属性,也就是类中不能直接访问的。但是不是可以直接访问的属性就是公有属性呢?其实也不是。在__init__()构造函数中的属性,对外基本都可以访问,但是他们并不是公有属性。那什么叫公有属性呢?
定义: 指的是所属这个类的所有对象,都可以访问的属性,叫做公有属性。
二、属性
2.1 成员属性
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')
print(p1.job, p2.job) # 输出 Doctor Police
我们在Person类下定义了两个对象,p1和p2。很显然我们没有办法让p1来访问到p2 的job属性,即Police。那么在构造函数__init__()中的self.name等属性,被称之为 成员属性。
2.2 公有属性
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
公有属性而言,所有实例对象访问它得到的值是一样的。
三、公有属性的特性
我们不仅可以访问,还能改变公有属性。
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
3.1 单个实例调用和改变公有属性
# 依据上例 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) # 输出
--------Befoer change---------
CN
CN
CN
--------after change---------
US
JP
US
p1在修改之前我们可以很好理解,因为大家都是调用的类Person的公有属性nationality,所以p1、p2的国籍属性是一样的,都是 'CN'。但是为什么在p1修改过公有属性后,p2的国籍属性没有改变呢?
在我们定义一个Person类的时候,其实在内存中就已经存在了,当然也包含了这个类的公有属性。在最初实例p1去调用类Person的nationality这个属性时,是直接引用类当中nationality的内存地址,而不是自己新增一个属性叫nationality。
如下所示:
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
这就可以解释为什么在Person类中的nationality改变为 'US' 时,p2也跟着改变。因为是直接引用内存当中的值。
p1.nationality = 'JP'
在p1直接赋值nationality这个属性后,其实就实例p1为自己新增了一个成员变量,叫做nationality。只是他们的名称相同而已,但是两者之 间并没有联系,甚至内存地址也不相同。
# 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
所以 p1.nationality='JP',并没有修改类Person的公有属性,而是为自己创建了一个新的成员属性,因此p1的改变对类的公有属性没有影响。
以上是有关类的公有属性的介绍的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

要获得intliteral属性而不是语法错误,请使用空格或括号。intliteral是Python中NumericLiterals的一部分。NumericLiterals还包括以下四种不同的数字类型 - int(有符号整数) - 它们通常被称为整数或整数,是正数

Gson@SerializedName注释可以序列化为JSON,并将提供的名称值作为其字段名称。此注释可以覆盖任何FieldNamingPolicy,包括可能已在Gson实例上设置的默认字段命名策略。可以使用GsonBuilder类设置不同的命名策略。语法@Retention(value=RUNTIME)@Target(value={FIELD,METHOD})public@interfaceSerializedName示例importcom.google.gson.annotations.*;

Python的dir()函数:查看对象的属性和方法,需要具体代码示例摘要:Python是一种强大而灵活的编程语言,其内置函数和工具为开发人员提供了许多方便的功能。其中一个非常有用的函数是dir()函数,它允许我们查看一个对象的属性和方法。本文将介绍dir()函数的用法,并通过具体的代码示例来演示其功能和用途。正文:Python的dir()函数是一个内置函数,

Win11磁盘属性未知怎么办?近期Win11用户在电脑的使用中,发现系统出现提示磁盘错误的情况,这是怎么回事儿呢?而且应该如何解决呢?很多小伙伴不知道怎么详细操作,小编下面整理了Win11磁盘出错的解决步骤,如果你感兴趣的话,跟着小编一起往下看看吧! Win11磁盘出错的解决步骤 1、首先,按键盘上的Win+E组合键,或点击任务栏上的文件资源管理器; 2、文件资源管理器的右侧边栏,找到边右键点击本地磁盘(C:),在打开的菜单项中,选择属性; 3、本地磁盘(C:)属性窗口,切换到工具选

如果您想获取文档从窗口左上角滚动到的像素,请使用pageXoffset和pageYoffset属性。对水平像素使用pageXoffset。示例您可以尝试运行以下代码来了解如何在JavaScript中使用pageXOffset属性-现场演示<!DOCTYPEhtml><html> <head> <style> &

CSS中bottom属性语法及代码示例在CSS中,bottom属性用于指定一个元素与容器底部之间的距离。它可以控制一个元素相对于其父元素底部的位置。bottom属性的语法如下:element{bottom:value;}其中,element表示要应用该样式的元素,value表示要设置的bottom值。value可以是一个具体的长度值,比如像素

绝望线缕是暴雪娱乐旗下佳作《炉石传说》中的一张稀有卡牌,在“威兹班的工坊”卡包中有机会获得。可消耗100/400点奥术之尘合成普通/金色版本。炉石传说绝望线缕属性介绍答:在威兹班的工坊卡包中有几率获得,也也可以通过奥术之尘合成。稀有度:稀有类型:法术职业:死亡骑士法力值:1效果:使所有随从获得亡语:对所有随从造成1点伤害

如何判断jQuery元素是否具有特定属性?在使用jQuery操作DOM元素时,经常会遇到需要判断元素是否具有某个特定属性的情况。这种情况下,我们可以借助jQuery提供的方法来轻松实现这一功能。下面将介绍两种常用的方法来判断一个jQuery元素是否具有特定属性,并附上具体的代码示例。方法一:使用attr()方法和typeof操作符//判断元素是否具有特定属
