葫芦小金刚 2020-07-28
实例变量就是对象个体特有的“数据”。
#定义类 class Dog: def __init__(self, name, age): self.name = name #创建和初始化实例变量name self.age = age #创建和初始化实例变量age #实例化对象 dog=Dog(‘球球‘,2) #对实例变量通过 “对象.实例变量” 形式访问 print(‘这是我家的狗,名字是%s, 现在%d岁了!‘%(dog.name,dog.age)) #这里后面不能直接使用name,age
_init_()方法就是构造方法,构造方法用来初始化实例变量。
在定义_init_() 方法时,它的第一个参数应该是self,之后的参数用来初始化实例变量。调用构造方法是不需要传入self参数。
class Dog: def __init__(self, name, age, sex=‘雌性‘): self.name = name self.age = age self.sex = sex d1=Dog(‘球球‘,2) d2=Dog(‘果果‘,1,‘雄性‘) d3=Dog(‘小白‘,3,‘雄性‘) print(d1.name,d1.age,‘岁‘,d1.sex) print(d2.name,d2.age,‘岁‘,d2.sex) print(d3.name,d3.age,‘岁‘,d3.sex)
实例方法和实例变量一样,都是某个实例(或对象)个体的特有方法。
定义实例方法时,它的第一个参数也应该是self,这会将当前实例与该方法绑定起来,这也说明该方法属于实例,在调用方法时不需要传入self,类似于构造方法
class Dog: def __init__(self, name, age, sex=‘雌性‘): self.name = name self.age = age self.sex = sex def run(self): #定义实例方法,只有一个self参数 print(‘小狗{}在跑 。。。‘.format(self.name)) def speak(self, sound): #定义实例方法,第一个参数是self,第二个参数是age,第三个参数是sound print(‘{}岁的小狗{}在叫着:{}‘.format(self.age, self.name, sound)) dog = Dog(‘球球‘, 2) #创建对象调用构造方法,省略默认值 dog.run() #在调用时采用“对象.实例方法” 形式,不需要传递参数 dog.speak(‘旺! 旺! 旺!‘) #需要传递一个参数sound
类变量是属于类的变量,不属于单个对象。
class Account: interest_rate=0.0568 #类变量利率 def __init__(self,owner,amount): self.owner=owner #创建并初始化实例变量 self.amount=amount account=Account(‘kk‘,800000.0) print(‘账户名: %s‘%account.owner) print(‘账户余额: %s‘%account.amount) print(‘利率: %s‘%Account.interest_rate) #对类变量通过“类名.类变量” 形式访问
类方法与类变量类似,属于类,不属于个体实例。在定义类的方法时,它的第一个参数不是self,而是类本身
class Account: interest_rate=0.0568 #类变量利率 def __init__(self,owner,amount): self.owner=owner #创建并初始化实例变量 self.amount=amount #定义类方法需要的装饰器,修饰函数、方法和类,用来约束它们 @classmethod def interest_by(cls,amt): #cls代表类自身,即Account 类 #cls可以直接使用Account替换,所以cls.interest_rate * amt 表达式可以改为Account.interest_rate * amt return cls.interest_rate * amt interest=Account.interest_by(10000.0) #对类方法通过“类名.类变量” 形式访问 print(‘计算利息: %f 元‘%interest)
类方法可以访问类变量和其他类方法,但不能访问其他实例方法和实例变量。在上面例子中,cls.interest_rate用于访问Account类变量interest_rate。如果在类方法interest_by()中添加访问实例变量的owner语句,则会发生错误。
#类方法 @classmethod def interest_by(cls, amt): # cls代表类自身,即Account 类 print(cls.owner) return cls.interest_rate * amt