类的访问方式

类的访问方式

 
* 不导入包访问
    * 被使用的类和当前类在同一个包下时可以直接访问。
    * 该类在java.lang中时,可以直接使用。
 * 导包访问
    * 导包格式01:import 包名.包名...类名; 导入指定包下的指定类。
    * 导包格式02:import 包名.包名...*;  导入指定包下的所有类,不包括子包下的类
    * 被使用的类和当前类不在同一个包下时,需要导包访问。 
 * 使用类全名访问
    * 类全名:包名.包名...类名    
 
 * 类访问的注意事项
    * 如果要在同一个类中使用不同包下的同名类时,只能有一个被导包,另一个类只能使用类全名访问。
### Python 属性的访问规则 在 Python 中,属性是一种与本身关联的属性,而不是与特定的对象实例绑定。因此,在设计上,属性通常通过名进行访问[^1]。 #### 1. 使用访问属性 当通过访问属性时,Python 的解释器会在的作用域中查找该属性。如果找到了对应的名称,则返回其值;否则抛出 `AttributeError` 错误。例如: ```python class MyClass: class_attribute = "这是属性" print(MyClass.class_attribute) # 输出: 这是属性 ``` 这种方式是最常见也是最推荐的方式,因为它清晰地表明了正在操作的是级别的数据。 --- #### 2. 使用实例名访问属性 尽管建议直接通过访问属性,但在某些情况下也可以通过实例对象间接访问属性。这种行为遵循以下规则: - 当尝试通过实例访问某个属性时,Python 首先会在实例自身的命名空间(即 `__dict__` 属性)中查找是否存在这个属性。 - 如果未找到,则继续到所属的命名空间中寻找相同的属性名称[^3]。 这意味着即使通过实例访问了一个原本属于的属性,只要实例尚未覆盖它,实际获取的就是原始的属性值。例如: ```python class MyClass: count = 0 instance = MyClass() print(instance.count) # 输出: 0 (实际上是从中读取的) MyClass.count += 1 print(instance.count) # 输出: 1 (因为实例没有单独定义 'count' 属性) ``` 然而需要注意一点:一旦给实例赋值一个新的同名属性,就会创建一个独立于的新实例属性,并遮蔽掉原来的属性[^2]。如下所示: ```python class MyClass: count = 0 s1 = MyClass() # 修改属性 MyClass.count += 1 print(s1.count) # 输出: 1 (依然指向中的 count) # 创建新的实例属性 s1.count = 5 print(s1.count) # 输出: 5 (现在 s1.count 是实例属性) print(MyClass.count) # 输出: 1 (属性不受影响) ``` 上述情况说明了一旦实例拥有了自己版本的某属性之后,再次试图经由该实例引用此属性就不会再去查询级别上的那个共享副本了。 --- #### 3. 名字重整机制的影响 对于以双下划线开头的名字(如 `__private_attr`),Python 实现了一种叫做名字重整的技术来模拟私有成员的效果。这使得这些特殊形式的变量难以被外部程序轻易修改或者混淆其他部分的功能逻辑[^4]。不过这一特性主要针对方法和字段隐藏用途较大,跟单纯讨论如何正常存取公开声明过的级资源关系不大。 综上所述,理解并掌握好何时应该利用哪种别的途径去取得所需的数据是非常重要的编程技巧之一。 --- ### 示例代码总结 下面给出一段综合性的演示代码帮助加深印象: ```python class Sample: shared_var = "初始状态" def __init__(self, name): self.name = name def test_access(): objA = Sample('Alpha') objB = Sample('Beta') print(f"Before change - Obj A sees {objA.shared_var}") print(f"Before change - Obj B sees {objB.shared_var}\n") Sample.shared_var = "更新后的全局状态" print(f"After global update via Class Name:") print(f"\tObj A now sees {objA.shared_var}") print(f"\tObj B also sees {objB.shared_var}") test_access() ``` 运行结果将是两者的显示一致反映了共同变更的事实。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值