资讯专栏INFORMATION COLUMN

Python方法(一) - 类的内部方法

Loong_T / 1940人阅读

摘要:输出来是一个对象这样便是最普通的用法了。但其实不是实例化一个类的时候第一个被调用的方法。对象通过提供方法可以模拟函数的行为,如果一个对象提供了该方法,就可以像函数一样使用它,也就是说等同于调用。

类(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 "" % (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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/42291.html

相关文章

  • python基础教程:类

    摘要:类对象被创建时存在于类命名空间内的所有名称都是有效的属性名称。类的实例化,是使用函数表示法,可以把类对象看做是会返回一个新的类实例的函数。这就是可变对象作为类变量时的特性。类变量是所有类的实例共享的属性和方法,实例变量是每个实例独有的数据。 Python是面向对象的高级编程语言,在Python里面一切都是对象:数字、字符串、元组、列表、字典、集合等内置数据类型,以及函数、方法、类、模块...

    fish 评论0 收藏0
  • 【数据科学系统学习】Python # 编程基础[三]

    摘要:新的称为子类,而被继承的称为基类父类或超类。继承最大的好处是子类获得了父类的全部功能。在继承关系中,如果一个实例的数据类型是某个子类,那它的数据类型也可以被看做是父类。 在上一篇中我们介绍了模块和数据结构,这一篇将介绍面向对象编程。 面向对象编程 面向对象编程——Object Oriented Programming,简称 OOP,是一种程序设计思想。OOP 把对象作为程序的基本单元...

    molyzzx 评论0 收藏0
  • Python方法(二) - 类与继承

    摘要:在类内部的方法中使用时。类的私有方法两个下划线开头,声明该方法为私有方法,不能在类地外部调用。先在本类中查找调用的方法,找不到才去基类中找。如果在继承元组中列了一个以上的类,那么它就被称作多重继承。 类定义 类对象:创建一个类之后,可以通过类名访问、改变其属性、方法 实例对象:类实例化后,可以使用其属性,可以动态的为实例对象添加属性(类似javascript)而不影响类对象。 类...

    DevWiki 评论0 收藏0
  • Python基础之接口——从协议到抽象基类

    摘要:本文重点协议是中非正式的接口了解抽象基类的基本概念以及标准库中的抽象基类掌握抽象基类的使用方法。三抽象基类的使用通过继承声明抽象基类声明抽象基类最简单的方式是继承或其他抽象基类注意在之间,继承抽象基类的语法是。 导语:本文章记录了本人在学习Python基础之面向对象篇的重点知识及个人心得,打算入门Python的朋友们可以来一起学习并交流。 本文重点: 1、协议是Python中非正式的接...

    TwIStOy 评论0 收藏0
  • [译] Python 学习 —— __init__() 方法 4

    摘要:同时,有多个类级别的静态构造函数的方法。这个累赘,无论如何,是被传递到每个单独的对象构造函数表达式中。我们可能只有几个特定的担忧,提供额外关键字参数给构造函数。 注:原书作者 Steven F. Lott,原书名为 Mastering Object-oriented Python 没有__init__()的无状态对象 下面这个示例,是一个简化去掉了__init__()的类。这是一个常见...

    yvonne 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<