首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python3.x:不继承地访问其他类中的self.xxx变量

Python3.x中,如果一个类想要访问其他类中的self.xxx变量,可以通过以下几种方式实现:

  1. 使用类的实例化对象进行访问:如果两个类之间存在关联关系,可以在一个类的方法中创建另一个类的实例化对象,并通过该对象访问其self.xxx变量。例如:
代码语言:txt
复制
class ClassA:
    def __init__(self):
        self.x = 10

class ClassB:
    def __init__(self):
        self.a = ClassA()

    def access_variable(self):
        print(self.a.x)

b = ClassB()
b.access_variable()  # 输出:10
  1. 将其他类的实例化对象作为参数传递:可以在一个类的方法中将其他类的实例化对象作为参数传递,并通过该参数访问其self.xxx变量。例如:
代码语言:txt
复制
class ClassA:
    def __init__(self):
        self.x = 10

class ClassB:
    def access_variable(self, obj):
        print(obj.x)

a = ClassA()
b = ClassB()
b.access_variable(a)  # 输出:10
  1. 使用类变量进行访问:如果某个变量在多个类中都需要共享或访问,可以将其定义为类变量,然后通过类名访问。例如:
代码语言:txt
复制
class ClassA:
    x = 10

class ClassB:
    def access_variable(self):
        print(ClassA.x)

b = ClassB()
b.access_variable()  # 输出:10

需要注意的是,以上方法都要求在访问其他类中的self.xxx变量时,该变量必须是公有的(即没有使用双下划线开头)。如果变量是私有的(即使用了双下划线开头),则无法直接访问,需要通过其他方法(如提供公有的getter方法)来间接访问。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

继承与隐藏:Java成员变量神秘禁忌

摘要 在Java,子类继承了父成员变量,但不能直接覆盖(或称为隐藏)父成员变量。...本文将解释为什么Java设计了这样规则,探讨与此相关继承和多态概念,并说明如何在子类访问和使用父成员变量。 1....子类可以声明与父相同名称成员变量,但它不会真正覆盖父成员变量,而是在子类创建一个新成员变量,与父成员变量形成隐藏关系。...如果需要访问成员变量,可以使用super关键字来显式引用父成员变量。 多态与方法重写 多态是面向对象编程一个重要概念,它允许一个对象表现出多种形态。...通过合理使用继承和方法访问成员变量,我们可以构建出更具有复用性和可维护性面向对象程序。

41920

【C++】继承 ⑩ ( 继承机制 static 静态成员 | 子类访问静态成员方法 )

一、继承机制中派生 static 关键字 1、子类继承静态成员 子类继承静态成员 : 父 ( 基 ) 使用 static 关键字 定义 静态成员变量 , 可以被所有的 子类 (...派生 ) 共享 ; 2、父静态成员访问控制权限改变 继承自 父 静态成员变量 , 仍然遵循 继承 子类 访问控制特性 , public 公有继承 : 父成员 在 子类 , 访问控制权限...成员 ; 父 private 成员 仍然是 private 成员 ; protected 保护继承 : 父成员 在 子类 , 访问控制权限 变为 protected , 基 公有成员...成员 ; 父 private 成员 仍然是 private 成员 ; private 私有继承 : 父成员 在 子类 , 所有成员访问控制权限 变为 private , 基 所有成员...; 或 对象名.静态成员名 child.c = 30; 方式 , 访问 继承自 父 静态成员 ; 4、静态成员使用要点 参考 【C++】静态成员变量 ( 静态成员变量概念 | 静态成员变量声明 |

38510

Python 知识点笔记:走进面向对象

,属性也少,python3.x系列都是新式; 两个内建函数:dir()可以返回对象属性,type()可以获取对象类型; 构造方法:在创建时候调用 def init (self, … ); 析构方法...:在销毁时候调用 def del(self, … ); 定义属性两种方法:里直接定义还有构造函数里用self.xxx定义,xx就是属性名,这样一来我们直接就能用self.xx调用了; python...__xx,加强型私有属性,直接的话不可以访问属性里会多出一个叫"_Programer__xx"属性,我们可以通过这个属性访问私有属性,不是真正意义上私有属性,仍然可以被访问到,只是实现了部分控制功能...; 函数和方法区别:函数依附于对象就是方法了; 对象方法就是method类型属性,变量可以等于方法,然后再把变量改变为字符串; 修饰符:@classmethod调用时只能用名来调用,对象是没法调用...,括号里面填上要继承名就好了; 推荐每个都要继承,至少继承object,这个是一切对象; 多重继承括号里放入多个要继承名; isinstance(a,b)判断a是否是b子类,issubclass

34830

为什么Java成员变量不能被重写?成员变量在Java能够被重写么?不会重写成员变量,而是隐藏成员变量访问隐藏域方法

这篇文章讨论了Java面向对象概念中一个基本概念--Field Hiding(成员变量隐藏) 成员变量在Java能够被重写么?...意思就是: 在一个,子类成员变量如果和父成员变量同名,那么即使他们类型不一样,只要名字一样。父成员变量都会被隐藏。在子类,父成员变量不能被简单用引用来访问。...而是,必须从父引用获得父被隐藏成员变量,一般来说,我们推荐隐藏成员变量,因为这样会使代码变得难以阅读。...其实,简单来说,就是子类不会去重写覆盖父成员变量,所以成员变量访问不能像方法一样使用多态去访问。...访问隐藏域方法 就是使用父引用类型,那么就可以访问到隐藏域,就像我们例子代码 就是使用类型转换System.out.println(((Super)c1).s); 翻译自http://www.programcreek.com

3.5K40

python编写代码一些细节

缩进主体顶层赋值语句都会产生类属性。(在C++可能将变量称为属性,函数称为方法,在Python中统一称为属性。) 另外一点是python基本上就是命名空间。...,C属性a是属性,所有的实例都会拥有这个属性,不在像之前__init__方法中使用self.xxx = xxx所产生属性,只属于实例,不属于。...另外,这里说这个属性是属于,并不是指类似于C++静态成员变量。实际上这里类属性才是C++普通数据成员。而通过self.xxx = xxx来产生属性这种操作在C++是没有的。...需要注意是,每个实例由自己命名空间字典,其中存放着self.xxx这类只属于实例属性;而对于对象而言,则记录着属性字典。 命名空间链接 查看命名空间链接,可以让你了解到程序代码继承层次。...下面这段代码使用了__class__,__bases__以及__name__来实现树爬升器,指出了继承层次。

35820

编程好习惯

一、python2与python3区别 1、性能 python3.x起始比python2.x效率要低,但是python3.x有极大优化空间,效率正在追赶,目前已经不差多少 2、编码 python3....python3.x去除了long类型,现在只有一种整数类型int,但是它行为就像2.xlong 新增了bytes类型,对应2.x版八位串 6、面向对象 引入抽象基 7、异常 所有异常都从...except Exception as e: …… 8、其他 python2.xxrange()在python3.x名为range() file被废弃 python2可以使用file...if 1: pass 2、命名 除非在lamdba函数,否则不要使用单字母变量名,但是即使在lamdba函数变量名也要尽可能有意义 包名、模块名、函数名全部使用小写,单词使用下划线链接...名、异常名使用首字母大写方法,异常名结尾加Error或者Warning 全局变量尽量使用大写,同一全局变量要加同一前缀,单词用下划线链接 自定义变量、函数名等不要与标准库名冲突 函数名必须有动词

21320

22个高级Python知识点总结,干货!

在Python2.x语法中用户自定义没有明确指定基就默认是没有基,在Python3.x语法,指定基为object。 ?...值得注意是:Python 3.0-Python3.3之间,继承抽象基语法是class ClassName(metaclass=adc.ABCMeta),其他版本是:class ClassName(...No.20 Python变量与垃圾回收机制 Python与Java变量本质上不一样,Python变量本事是个指针。...No.21 Python元编程 property动态属性 ? 在Python,为函数添加@property装饰器可以使得函数像变量一样访问。...非数据属性描述符 在Python新式,对象属性访问都会调用__getattribute__()方法,它允许我们在访问对象时自定义访问行为,值得注意是小心无限递归发生。

92300

Python 知识点总结篇(5)

; 特性: 封装:将实现功能细节不对外公开; 继承:代码重用,分为单继承和多继承; 多态:允许将父对象设置为一个或多个子对象相等技术,是为了保证继承和派生时候使用族谱任一某一属性时正确调用...__; 经典与新式继承顺序:Python3.x中经典和新式都是广度优先继承,Python2.x中经典是深度优先,新式时广度有限继承,新式:class Demo(object); 静态方法...:名义上归类管理,实际与无关,无法访问或实例属性; 方法:只能访问变量,不能访问实例变量; 属性方法:把一个方法变成一个静态属性,隐藏实现细节; 反射:通过字符串映射,hasattr(obj..., attr_name):判断一个对象里是否有对应字符串方法映射,getattr(obj, attr_name):根据字符串去获取对象对应方法内存地址,setattr(obj, 'str', func2...code ... except Exception: code 抓错误时候一定从小开始抓起,先抓子集,再抓总集,一般建议一 开始直接抓错误总集;

19630

Python学习笔记 面向对象编程

和对象 定义 Python支持面向对象编程,下面是一个例子。我们可以看到,在Python声明其他语言差不多。不过实际上差别还是挺大。...如果在编写没有self变量,那么这些变量就是变量,可以在该类所有对象之间共享。这个概念类似Java静态字段。下面的population就是一个共享字段例子。...虽然这些“私有变量”也可以在外边访问,但是我们千万不要这么做。私有字段作为内部实现,随时可能存在变化可能,不应该向外部暴露。我们代码也不应该依赖其他私有变量。...如果要继承某个或某些,在定义上使用括号指定要继承。如果需要访问成员,使用基名加点访问符.来访问。...多重继承签名类似下面这样。当我们访问子类成员时,Python会先查找子类存不存在该成员。如果不存在的话在查找父,如果父不存在就查找父,直到查到头为止。

73250

Python快速编程入门课后习题答案「建议收藏」

(4)、相比python2.x版本,python3.x版本在异常方面有很多改变: •在python2.x版本,所有类型对象都是直接被抛出,但是,在python3.x版本,只有继承自BaseException..._init_ D. init Python包含一个特殊变量(A),它表示当前对象自身,可以访问成员。...继承 D.多态 以下C继承A和B格式,正确是(C)。...在现有基础上构建新,新称作子类,现有的称作父。 父私有属性和方法是不能被子类继承,更不能被子类访问。 Python语言既支持单继承,也支持多继承。...子类想按照自己方式实现方法,需要重写从父继承方法。 子类通过super()可以成功访问成员。 位于内部、方法外部方法是方法。

1.6K10

Python知识点总结篇(五)

; 特性: 封装:将实现功能细节不对外公开; 继承:代码重用,分为单继承和多继承; 多态:允许将父对象设置为一个或多个子对象相等技术,是为了保证继承和派生时候使用族谱任一某一属性时正确调用...__; 经典与新式继承顺序:Python3.x中经典和新式都是广度优先继承,Python2.x中经典是深度优先,新式时广度有限继承,新式:class Demo(object); 静态方法...:名义上归类管理,实际与无关,无法访问或实例属性; 方法:只能访问变量,不能访问实例变量; 属性方法:把一个方法变成一个静态属性,隐藏实现细节; 反射:通过字符串映射,hasattr(obj..., attr_name):判断一个对象里是否有对应字符串方法映射,getattr(obj, attr_name):根据字符串去获取对象对应方法内存地址,setattr(obj, 'str', func2...: code ... except Exception: code 抓错误时候一定从小开始抓起,先抓子集,再抓总集,一般建议一 开始直接抓错误总集;

29620

python:面向对象基本知识

__class__.变量 访问变量 # 实例变量 # self.变量 定义实例变量 # __dict__ 内置函数(同__all__,定义import*范围):对象下所有变量字典...4 方法 # 4.1 实例方法 # self 显胜于隐 相当于this,只和实例对象有关,和无关 #访问实例变量,要加self # 访问变量 __class__ 指定...__class__.变量 ) # 调用:.方法() (建议用对象调用方法,不合逻辑) # 4.3 静态方法 @staticmethod,推荐用此方法 # 在函数前加上一个...@staticmethod # 可以同时被 对象、 调用 # 可以访问变量 Student.sum,和变量关联性不大方法时用 5 成员可见性 # 只允许内部方法操作变量,避免直接修改数据变量...# __ 前面加 双下划线 变量变成私有 6 继承性 # 建议一个单独成一个文件 # super 指代父 Python3.x 和 2.x 一个区别是:3 可以使用直接使用 super().xxx

37820

python_类属性和实例属性

def __init__(self):      # self.xxx均为实例属性,也可以在其他方法定义,但只有在其方法调用才会生效                      # ...init__是构造函数,对象创建就调用,用于初始化实例属性                                       self.color = 'red'      # 此为实例对象,对内其他方法可通过...__fruit 调用                   # 默认对外不予许访问 ,但实际提供了访问私有属性方式,用于测试和调试                   # obj1....Python属性获取是按照从下到上顺序来查找属性; 2. Python和实例是两个完全独立对象; 3....Python属性设置(比如赋值)是针对对象本身进行; 在python和对象都可以访问类属性,而java静态变量只能被调用

58720

【从零学习python 】48.Python继承与多继承详解

在Python继承可以分为单继承、多继承和多层继承。 单继承 子类只继承一个父继承概念表示子类获得了父所有方法和属性。...继承语法 class 名(父名): pass 子类继承自父,可以享受父已经封装好方法,不需要再次定义。子类应该根据职责封装子类特有的属性和方法。...pass 使用多继承时需要注意以下事项 如果不同存在同名方法,子类对象在调用方法时,会调用哪个父方法?应尽量避免这种容易产生混淆情况。...如果多个父之间存在同名属性或方法,应尽量避免使用多继承。 PythonMRO Python针对提供了一个内置属性__mro__,可以用来查看方法搜索顺序。...经典:不以object为基推荐使用。 在Python3.x以后定义时,如果没有指定父,这个会默认继承自object,所以,Python3.x版本定义都是新式

15710

如何优化Python占用内存

__weakref__(弱引用)可以查看这个文档, 对象__dict__存储了一些self.xxx一些东西。...__slots__声明包含若干实例变量,并为每个实例预留恰好足够空间来保存每个变量;这样Python就不会再使用dict,从而节省空间。 那么用slot就是非非常那个有必要吗?...设置一个新属性,比如instance.a = 1, 但是由于a不在__slots__里面就直接报错了,你得不断去修改__slots__或者用其他方法迂回解决 实例不能有弱引用(weakref)目标...dataobject class Point(dataobject): x:int y:int z:int 以这种方式创建将创建参与循环垃圾收集机制实例。...Point(1,2,3) >>> print(sys.getsizeof(ob)) 40 要访问这些字段,还使用特殊描述符通过其从对象开头偏移量来访问字段,这些对象位于字典: mappingproxy

1.8K20
领券