首页
学习
活动
专区
工具
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关键字来显式地引用父类的成员变量。 多态与方法重写 多态是面向对象编程中的一个重要概念,它允许一个对象表现出多种形态。...通过合理地使用继承和方法访问父类成员变量,我们可以构建出更具有复用性和可维护性的面向对象程序。

66820

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

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

54910
  • 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

    35530

    为什么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__来实现类树爬升器,指出了类的继承层次。

    36820

    编程好习惯

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

    22420

    python初步

    多态、运算符重载、继承和多重继承等面向对象编程(Object Oriented Programming OOP)的主要特征也在Python的类模式中得到很好的支持。...所以,在Windows下编程的Python程序,可以轻松在Lunix等其他系统中运行。...等)的强大功能 Python具有一些强大的功能如下: ​ 动态数据类型​:Python在代码运行过程中跟踪变量的数据类型,不需要在代码中声明变量的类型,也不要求在使用之前对变量进行类型的声明。 ​...在Python2.x中,1None、len中则成圣了TypeError异常。 在==和!=中,不兼容类型的数据视为不相等. 6....异常处理​​ 在Python3.x中,异常处理的改变主要如下。 所有异常都从BaseException继承,并删除了StandardError异常。 取消了异常类的序列行为和.message属性。

    9010

    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__()方法,它允许我们在访问对象时自定义访问行为,值得注意的是小心无限递归的发生。

    1K00

    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 抓错误的时候一定从小的开始抓起,先抓子集,再抓总集,一般不建议一 开始直接抓错误总集;

    20630

    Python学习笔记 面向对象编程

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

    76650

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

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

    1.7K10

    Python知识点总结篇(五)

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

    30420

    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

    38720

    python_类属性和实例属性

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

    59420
    领券