Compare commits

..

2 Commits

Author SHA1 Message Date
4d74d5ea44 09-15-周一_16-08-20 2025-09-15 16:08:20 +08:00
44510de885 09-15-周一_16-05-58 2025-09-15 16:05:59 +08:00

View File

@@ -71,12 +71,12 @@ class C:
name = "公有静态字段" name = "公有静态字段"
def func(self): def func(self):
print (C.name) print(C.name)
class D(C): class D(C):
def show(self): def show(self):
print (C.name) print(C.name)
print(C.name) # 类访问 print(C.name) # 类访问
@@ -94,12 +94,12 @@ class C:
__name = "私有静态字段" __name = "私有静态字段"
def func(self): def func(self):
print (C.__name) print(C.__name)
class D(C): class D(C):
def show(self): def show(self):
print (C.__name) print(C.__name)
print(C.__name) # 不可在外部访问 print(C.__name) # 不可在外部访问
@@ -140,29 +140,6 @@ obj_son = D();
obj_son.show() # 派生类中访问 obj_son.show() # 派生类中访问
``` ```
```python
class C:
def __init__(self):
self.__foo = "私有字段"
def func(self):
print self.foo  # 类内部访问
class D(C):
def show(self):
print self.foo  派生类中访问
obj = C()
obj.__foo # 通过对象访问 ==> 错误
obj.func() # 类内部访问 ==> 正确
obj_son = D();
obj_son.show() # 派生类中访问 ==> 错误
```
```python ```python
class C: class C:
@@ -172,14 +149,16 @@ class C:
def func(self): def func(self):
print(self.__foo) # 类内部访问 print(self.__foo) # 类内部访问
class D(C): class D(C):
def show(self): def show(self):
print(self.__foo) # 派生类中访问 print(self.__foo) # 派生类中访问
obj = C() obj = C()
print(obj.__foo) # 通过对象访问 ==> 错误 obj.__foo # 通过对象访问 ==> 错误
obj.func() # 类内部访问 ==> 正确 obj.func() # 类内部访问 ==> 正确
obj_son = D() obj_son = D()
@@ -240,11 +219,11 @@ obj.__add() # 派生类中不能访问
总结: 总结:
对于这些私有成员来说,他们只能在类的内部使用,不能类的外部以及派生类中使用. 对于这些私有成员来说,他们只能在类的内部使用,不能类的外部以及派生类中使用.
**ps非要访问私有成员的话可以通过 对象._类__属性名,但是绝对不允许!!!** **ps非要访问私有成员的话可以通过 对象._类__属性名,但是绝对不允许!!!**
为什么可以通过._类__私有成员名访问呢?因为类在创建时,如果遇到了私有成员(包括私有静态字段,私有普通字段,私有方法)它会将其保存在内存时自动在前面加上_类名. 为什么可以通过`._类__私有成员名` 访问呢?因为类在创建时,如果遇到了私有成员(包括私有静态字段,私有普通字段,私有方法)它会将其保存在内存时自动在前面加上_类名.
## 类的其他成员 ## 类的其他成员
@@ -487,7 +466,7 @@ print(issubclass(C,A))
思考:那么 list str tuple dict等这些类与 Iterble类 的关系是什么? 思考:那么 list str tuple dict等这些类与 Iterble类 的关系是什么?
```python ```python
from collections import Iterable from collections.abc import Iterable
print(isinstance([1,2,3], list)) # True print(isinstance([1,2,3], list)) # True
print(isinstance([1,2,3], Iterable)) # True print(isinstance([1,2,3], Iterable)) # True
@@ -495,3 +474,14 @@ print(issubclass(list,Iterable)) # True
# 由上面的例子可得这些可迭代的数据类型list str tuple dict等 都是 Iterable的子类。 # 由上面的例子可得这些可迭代的数据类型list str tuple dict等 都是 Iterable的子类。
``` ```
这种继承关系形成了Python对象模型的闭环object是所有类的基类type是所有类型的基类而type本身又是object的子类。
```python
print(isinstance(object, type))
print(issubclass(type, object))
# object是type的实例因为type创建了object类
# type是object的子类因为所有类都继承自object包括type本身
```