Python方法(一) - 类的内部方法
类(Class)和实例(Instance)
类是抽象的模板 实例是根据类创建出来的一个个具体的“对象” 每个对象都拥有相同的方法,但各自的数据可能不同 方法就是与实例绑定的函数,和普通函数不同,方法可以直接访问实例的数据;
super
class OldDog():
def __init__(self):
print('I am an old dog !')
self.hungry = True
def eat(self):
if self.hungry:
print('I eat it !')
self.hungry = False
else:
print('No thanks!')
class NewDog(OldDog):
def __init__(self):
super().__init__()
print('I am a new dog!')
olddog = OldDog()
olddog.eat()
olddog.eat()
newdog = NewDog()
newdog.eat()
newdog.eat()当子类继承父类的时候,我们继承了父类的方法。子类中含有__init__时,不会自动调用父类__init__,如需使用父类__init__中的变量,则需要在子类__init__中显式调用
repr
- 作用
返回实例化对象的表达
- code
class MyClass() :
def __str__(self) :
return "我是MyClass的一个实例"
def __repr__(self) :
return "这回连print都省了"
a=MyClass()- result
>>> print(a) 我是MyClass的一个实例 >>> a 这回连print都省了
- 链接
一个flask json返回值的问题 https://www.v2ex.com/t/195379
new__、__init__、__call
__new__: 对象的创建,是一个静态方法,第一个参数是cls。(想想也是,不可能是self,对象还没创建,哪来的self) __init__ : 对象的初始化, 是一个实例方法,第一个参数是self。 __call__ : 对象可call,注意不是类,是对象
先有创建,才有初始化。即先__new__,而后__init__。
- new
class Bar(object):
pass
class Foo(object):
def __new__(cls, *args, **kwargs):
return Bar()
print Foo()
输出来是一个Bar对象- init
class Person(object):
"""Silly Person"""
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return '<Person: %s(%s)>' % (self.name, self.age)
if __name__ == '__main__':
piglei = Person('piglei', 24)
print piglei这样便是__init__最普通的用法了。但__init__其实不是实例化一个类的时候第一个被调用 的方法。 当使用 Persion(name, age) 这样的表达式来实例化一个类时,最先被调用的方法 其实是 __new__ 方法。
- call
对象通过提供__call__(slef, [,*args [,**kwargs]])方法可以模拟函数的行为,如果一个对象x提供了该方法,就可以像函数一样使用它,也就是说x(arg1, arg2...) 等同于调用x.__call__(self, arg1, arg2) 。模拟函数的对象可以用于创建防函数(functor) 或代理(proxy).
class Foo(object):
def __call__(self):
pass
f = Foo()#类Foo可call
f()#对象f可call 相关推荐
zhuquan0 2020-05-25
bcbeer 2020-05-02
class Singleton: def __new__: # 关键在于这,每一次实例化的时候,我们都只会返回这同一个instance对象 if not hasattr: cls.instance =
lhxxhl 2020-05-16
fly00love 2020-03-08
ladysosoli 2020-03-01
PHP学习笔记 2020-05-07
DCXabc 2020-05-01
liusarazhang 2020-03-06
zhuxianfeng 2020-03-03
Kwong 2020-03-01
liugan 2020-02-25
Dimples 2020-02-14
wangqing 2020-02-13
fanhuasijin 2020-02-03