python - 类变量无法对实例变量执行属性查找
问题描述
我在玩和学习python OOP这个庞大的话题时观察到,一个类变量可以被创建的类实例访问,但是类不能调用类定义的实例变量
class abc():
height=180
def __init__(self,name):
self.age=12
self.name=name
ee=abc("Muhammad")
print(ee.height)
print(abc.height)
输出
180
180
但是,如果我尝试通过类名直接访问类变量,则会出现错误。
ee=abc("Muhammad")
print(ee.height)
print(abc.age)
输出
AttributeError: class abc has no attribute 'age'
所以,我观察了这一点,并认为与初学者分享python OOP的深度会有所帮助。请如果有人可以对此有所了解。
解决方案
您没有使用age = 12
in设置属性__init__
。您所做的一切都定义了一个局部变量,该变量将在__init__
完成后收集垃圾。
您必须使用abc.age = 12
实际设置类 abc
(或type(self).age = 12
)的属性。
我假设这是一个教育示例,否则为似乎是模特的人设置班级年龄并不是很有用。
每次__init__
调用时重新设置类属性也是多余的。
推荐阅读
- php - 重写时的数据库查询
- javascript - 如何选择每个
- 使用 Jquery 或 Javascript 依次单击每个按钮
- c++ - 带有 T = char* 的 `const T` 不是 `const char*`?
- java - 将逗号分隔的字符串转换为最后一个逗号的列表
- php - HTML、CSS div 和 img 元素放置
- apache-kafka - Kafka 用于日内可视化、监控和命令处理
- react-native-navigation - 由于 redux 操作而推送屏幕
- linux - ubuntu make show 完整命令
- c# - SignalR Webhost 与 ASP.NET Core 2.1 和 UWP 应用程序作为客户端返回“405 方法不允许”
- java - Java:当 foo() 在超类中时,this.foo() 和 super.foo() 是否相同?