美文网首页
《Python基础教程》學習筆記

《Python基础教程》學習筆記

作者: 余顺太 | 来源:发表于2020-08-12 11:10 被阅读0次
    class MyClass:
        pi = 3.14   # 因为pi前没有self所以pi属于MyClass这个类,因此也属于该类将来创建的实例。对于实例而言它就叫做self.pi,而对于类而言它就叫做MyClass.pi。
    
        def __init__(self,value=42):
            self.tmp = value   #因为tmp前面加上了self,所以这里的self.tmp不属于类(即不存在MyClass.tmp)而是属于该类创建的实例,因为带self的是实例的属性,不是类的属性,带self的只存在于实例中。
    
    >>> f = MyClass()   #创建实例
    >>> f.tmp   #tmp是在类中带上了self所以tmp是实例属性,f就是实例。
    42
    
    >>> MyClass.tmp    #tmp不是类属性,所以这个将会失败
    Traceback (most recent call last):
     ......
    
    >>> MyClass.pi   #pi是类属性
    3.14
    >>> f.pi   #pi前没有self,所以pi既是类属性也是由类创建出来的实例属性。
    3.14
    

    9.5.1 函数property的理解

    
    class Rectangle:
        def __init__ (self):
            self.width = 0
            self.height = 0
            self.area = 0
        def set_size(self, size):
            self.width, self.height = size   #将高和宽都称为size,这样管理起来比较方便
             self.area = self.width * self.height = size
        def get_size(self):
            return self.width, self.height
        size = property(get_size,set_size)  #获取方法在前,设置方法在后。这里其实产生的是self.size,这里省略了self
    
    
    rect = Rectangle()
    print (rect.get_size())
    
    rect.size = 10,5  #将宽高理解成一组东西,叫做size,对size这一个属性进行更改,就相当于更改了两个属性。size是类(Rectangle())中一个实例(rect)的属性。可以直接在外面进行赋值操作。执行赋值语句的时候会调用set_size的方法,将10和5作为参数,传递进去。
    print (rect.get_size())
    print (rect.size)
    
    
    #有一些属性,然后定义一个设置这些属性的方法(给它们取一个名字,这里是size),再定义一个获取这些属性的方法,然后给
    

    还可以计算面积

    9.5.2 静态方法和类方法

    #一般的对象方法在没有创建实例的时候没法调用
    
    class MyClass:
        def foo(self):
            print ('hi')
    
    MyClass.foo()  #没有创建实例,无法调用方法
    
    tmp = MyClass() #创建实例tmp
    tmp.foo()  #通过实例调用方法
    
    #不创建实例有三种策略可使函数在外部被调用;
    #其实也可以
    #策略一:
    MyClass().foo()
    
    #策略二:静态方法
    
    class MyClass:
        def foo():
            print ('hi')
        foo = staticmethod(foo)  
    
    
    #策略三:类方法.
    #类方法中要包含参数cls
    class MyClass:
        def foo(cls):  
            print ('hi')
        foo = classmethod(foo)  
    

    相关文章

      网友评论

          本文标题:《Python基础教程》學習筆記

          本文链接:https://www.haomeiwen.com/subject/ylypdktx.html