《Python基础教程》學習筆記

2020-08-12  本文已影响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)  
上一篇下一篇

猜你喜欢

热点阅读