python 类与对象

类的成员

python 类与对象

实例变量

实例变量就是对象个体特有的“数据”。

#定义类
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

运行效果:

python 类与对象

构造方法

_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)

运行效果:

python 类与对象

实例方法

实例方法和实例变量一样,都是某个实例(或对象)个体的特有方法。
定义实例方法时,它的第一个参数也应该是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

运行效果:

python 类与对象

类变量

类变量是属于类的变量,不属于单个对象。

代码如下:

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) #对类变量通过“类名.类变量” 形式访问

运行结果:

python 类与对象

类方法

类方法与类变量类似,属于类,不属于个体实例。在定义类的方法时,它的第一个参数不是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)

运行结果:

python 类与对象

注意:

类方法可以访问类变量和其他类方法,但不能访问其他实例方法和实例变量。在上面例子中,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

python 类与对象

相关推荐