Compare commits
2 Commits
c09e949cd3
...
4d74d5ea44
Author | SHA1 | Date | |
---|---|---|---|
4d74d5ea44 | |||
44510de885 |
@@ -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本身)。
|
||||||
|
```
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user