-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
更加抽象的内容
-
Python也是OOP的编程语言,因此封装继承多态也是Python中的重要特性.
-
多态. 事实上,唯一能够毁掉多态的就是使用函数进行显式的类型检查,比如type,isinstance以及issubclass函数等.如果可能的话,应该尽量避免使用这些毁掉多态的方式.真正重要的是如何让对象按照你所希望的方式工作,不管它是否是正确的类型.
-
封装.每一个object都有自己的状态,使用者不需要关心这个object的各种attribute是怎样进行设定的.
-
继承.更好的设计,减少代码量.
-
类(class)是指一种类型,而object都是某一个类的instance.
__metaclass__ = type #确定使用新式类,旧式类和新式类之间是有区别的.
#新式类的语法中需要放置该赋值语句,但不是必要的显示地包含这行语句.
class Person:
name = ''
def setName(self, name):
self.name = name
def getName(self):
return self.name
def greet(self):
print("hello world " + self.name)
- 方法(绑定方法)将它们第一个参数绑定到所属的实例上,因此不需要提供该参数(self).Python与Java不同的是可以将方法方法绑定到另一个方法上,这样原有的方法就会被改变了. Python中的方法绑定换了实际就是将参数中需要的self更换了.
class Test:
def method(self):
print('12345')
def method2():
print('678910')
a = Test()
a.method() #12345
a.method = method2 #对方法进行绑定,可以理解为对方法进行赋值.
a.method() #678910
b = a.method
b() #678910
- Python并不直接支持私有方式(类似于Java中的private),可以通过添加双下划线_来将方法或者特性变为私有. 不过通过object._Class名__私有方法或者attribute也是可以访问到私有的property的,但是不建议这样做.简而言之,Python中并不能确保私有的方法或者变量无法被外界访问(类似于Java反射也可以访问私有的变量或者方法),但是十分不建议developer这样做.
class Private:
__name = '12345' #设为私有
def __getName(self): #设为私有
print(self.__name)
def getName(self):
self.__getName()
p = Private()
p.getName()
p.__name #无法访问,报变量不存在的exception
p.__getName() #无法访问,报方法不存在的exception
p._Private__getName() #可以访问,但是并不建议
- 类的命名空间(class namespace),所有位于class语句中的代码都在特殊的命名空间中执行,这种特殊的命名空间被称为类命名空间.这个命名空间可由类内所有成员访问.
class C:
print(1234)
C #1234
class MemberCount:
members = 0 #该attribute为所有object共享
def init(self): #该方法只为每个self object使用
MemberCount.members += 1
a = MemberCount()
a.init()
print(a.members) #1
b = MemberCount()
b.init()
print(b.members) #2 - members为所有类型共享的属性
a.members = 'k2'
print(a.members) #k2 - 新members的值被写到了a的特性中
print(b.members) #2 - b的特性中的members并没有被改变,因为上一个过程中发生了类范围内的变量屏蔽.
#类似于如果给共享的全局变量赋值,该变量就变成了该instance的局部变量.
Metadata
Metadata
Assignees
Labels
No labels