揭秘:Python中的“self”
在在类方法中,可以通过一个特殊参数(按照惯例称为 self)来引用实例。self 始终是实例方法的第一个属性。下面介绍一下如何不仅可以与所有实例共享属性,还可以共享方法
# oop/class.self.py
class Square :
side = 8
def area ( self ): # self 是对实例的引用
return self.side ** 2
sq = Square()
print (sq.area()) # 64 (在类上找到边)
print (Square.area(sq)) # 64 (相当于 sq.area())
sq.side = 10
print (sq.area()) # 100 (在实例上找到边)
注意 sq 如何使用 area 方法。这两个调用 Square.area(sq) 和 sq.area() 是等效的,并告诉该机制是如何工作的。要么将实例传递给方法调用 (Square.area(sq)),该方法在方法中将采用名称 self,要么可以使用 sq.area()
# oop/class.price.py
class Price :
def Final_price ( self, vat,discount= 0 ):
"""应用增值税和固定折扣后返回价格。"""
return (self.net_price * ( 100 + vat) / 100 ) - 折扣
p1 = Price()
p1.net_price = 100
print (Price.final_price(p1, 20 , 10 )) # 110 (100 * 1.2 - 10)
print (p1.final_price( 20 , 10 )) # 等效
可以声明方法时使用参数。可以使用与函数完全相同的语法,但需要记住,第一个参数始终是该方法将绑定到的实例。不一定需要称其为 self,一般约定使应用self。