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