Merge branch 'master' of github.com:xianhu/LearnPython

master
xianhu 2017-05-02 10:08:15 +08:00
commit eb7573ee26
3 changed files with 11 additions and 11 deletions

View File

@ -416,7 +416,7 @@
function document function document
""" """
print() print()
class Employee: class Employee(object):
""" """
class document class document
""" """
@ -807,7 +807,7 @@
I1 = C1('bob') I1 = C1('bob')
#-- Python的类没有基于参数的函数重载 #-- Python的类没有基于参数的函数重载
class FirstClass: class FirstClass(object):
def test(self, string): def test(self, string):
print(string) print(string)
def test(self): # 此时类中只有一个test函数 即后者test(self) 它覆盖掉前者带参数的test函数 def test(self): # 此时类中只有一个test函数 即后者test(self) 它覆盖掉前者带参数的test函数
@ -857,7 +857,7 @@
pass pass
# OOP和委托: "包装"对象 在Python中委托通常是以"__getattr__"钩子方法实现的, 这个方法会拦截对不存在属性的读取 # OOP和委托: "包装"对象 在Python中委托通常是以"__getattr__"钩子方法实现的, 这个方法会拦截对不存在属性的读取
# 包装类(或者称为代理类)可以使用__getattr__把任意读取转发给被包装的对象 # 包装类(或者称为代理类)可以使用__getattr__把任意读取转发给被包装的对象
class wrapper: class wrapper(object):
def __init__(self, object): def __init__(self, object):
self.wrapped = object self.wrapped = object
def __getattr(self, attrname): def __getattr(self, attrname):
@ -870,7 +870,7 @@
list(x.keys()) # 返回 "Trace: keys" ['a', 'b'] list(x.keys()) # 返回 "Trace: keys" ['a', 'b']
#-- 类的伪私有属性:使用__attr #-- 类的伪私有属性:使用__attr
class C1: class C1(object):
def __init__(self, name): def __init__(self, name):
self.__name = name # 此时类的__name属性为伪私有属性 原理 它会自动变成self._C1__name = name self.__name = name # 此时类的__name属性为伪私有属性 原理 它会自动变成self._C1__name = name
def __str__(self): def __str__(self):
@ -881,7 +881,7 @@
I._C1__name = 'jeey' # 这里可以修改成功 self.name = jeey I._C1__name = 'jeey' # 这里可以修改成功 self.name = jeey
#-- 类方法是对象:无绑定类方法对象 / 绑定实例方法对象 #-- 类方法是对象:无绑定类方法对象 / 绑定实例方法对象
class Spam: class Spam(object):
def doit(self, message): def doit(self, message):
print(message) print(message)
def selfless(message) def selfless(message)
@ -945,7 +945,7 @@
fooChild.bar('HelloWorld') fooChild.bar('HelloWorld')
#-- #实例方法 / 静态方法 / 类方法 #-- #实例方法 / 静态方法 / 类方法
class Methods: class Methods(object):
def imeth(self, x): print(self, x) # 实例方法:传入的是实例和数据,操作的是实例的属性 def imeth(self, x): print(self, x) # 实例方法:传入的是实例和数据,操作的是实例的属性
def smeth(x): print(x) # 静态方法:只传入数据 不传入实例,操作的是类的属性而不是实例的属性 def smeth(x): print(x) # 静态方法:只传入数据 不传入实例,操作的是类的属性而不是实例的属性
def cmeth(cls, x): print(cls, x) # 类方法:传入的是类对象和数据 def cmeth(cls, x): print(cls, x) # 类方法:传入的是类对象和数据
@ -975,13 +975,13 @@
#-- 类修饰器:是它后边的类的运行时的声明 由@符号以及后边紧跟的"元函数"(metafunction)组成 #-- 类修饰器:是它后边的类的运行时的声明 由@符号以及后边紧跟的"元函数"(metafunction)组成
def decorator(aClass):..... def decorator(aClass):.....
@decorator @decorator
class C:.... class C(object):....
# 等同于: # 等同于:
class C:.... class C(object):....
C = decorator(C) C = decorator(C)
#-- 限制class属性: __slots__属性 #-- 限制class属性: __slots__属性
class Student: class Student(object):
__slots__ = ('name', 'age') # 限制Student及其实例只能拥有name和age属性 __slots__ = ('name', 'age') # 限制Student及其实例只能拥有name和age属性
# __slots__属性只对当前类起作用, 对其子类不起作用 # __slots__属性只对当前类起作用, 对其子类不起作用
# __slots__属性能够节省内存 # __slots__属性能够节省内存

View File

@ -5,7 +5,7 @@ python_metaclass.py by xianhu
""" """
class Foo: class Foo(object):
def hello(self): def hello(self):
print("hello world!") print("hello world!")
return return

View File

@ -27,7 +27,7 @@ print(test([3, 1], 2))
primes: List[int] = [] primes: List[int] = []
captain: str captain: str
class Starship: class Starship(object):
stats: Dict[str, int] = {} stats: Dict[str, int] = {}