python基础知识10——类

1.类与实例:
类与实例就像一般与特殊的区别:
如动物可以是一个类,而狗可以是这个类的一个实例, 人可以是一个类,而学生可以是这个类的一个实例

2.创建类与实例:
类的创建 :

class 类名(父类或基类,一般默认为object) :
属性
方法

实例的创建:

实例名 = 类名()

实例可以使用类的属性与方法

class Animal(object):
    def eat(self, food):
        print(f'eating {food}!')
    def play(self, toy):#self为实例对象
        print(f'playing {toy}!')
    def sleep(self):
        self.eat('rice')#self用于类的函数之间的调用
        print('sleeping!')

dog = Animal()#当实例对象调用的时候self为实例对象本身
dog.play('books')#self默认为实例对象,可不用传递
#也可以使用Animal.play(dog, 'books')
dog.sleep()

结果:
在这里插入图片描述

3.类的__init__方法:
当类创建一个实例的时候会自动调用init方法

class Animal(object):
    def __init__(self, name, age):
        self.name = name
        self.old = age
        print('animal!')
    def play(self, toy):
        print(f'{self.name} is {self.old} and playing {toy}!')

dog = Animal('Teddy', 5)#在实例化对象的时候就调用了init方法
dog.play('toy')

结果:
在这里插入图片描述

4.实例属性与类属性
实例属性:self就是实例,而self.name以及self.old等这些就是实例属性,在类中使用实例属性可以使用self.__的形式

class Animal(object):
    def __init__(self, name, age):
        self.name = name
        self.old = age
        print('animal!')
    def play(self, toy):#self为实例对象
        print(f'{self.name} is {self.old} and playing {toy}!')
 

dog = Animal('Teddy', 5)#在实例化对象的时候就调用了init方法
dog.gender = 'male'#在类外面动态定义的实例属性
print(dog.gender)

pig = Animal('andy', 5)#在实例化对象的时候就调用了init方法
print(pig.gender)

输出:
在这里插入图片描述
pig没有gender属性
在这里插入图片描述

类属性:
类的属性就像是所有实例所共有的属性,如果实例没有这个属性,就会使用类属性,有则使用实例的属性

class Animal(object):
    age = 5
    def eat(self,food):
        print(f"正在{food}")

    def play(self):
        print("正在玩耍")

    def sleep(self):
        print("正在睡觉")

Animal.age = 8
dog = Animal()
# dog.eat("狗粮")
# dog.play()
# dog.sleep()
dog.age = 10#有自己的实例属性
print(f'dog的age是{dog.age}')

pig = Animal()#没有自己的age属性会随类的变化而变化
print(f'pig的age是{pig.age}')
print(f'Animal的age是{Animal.age}')

输出:
在这里插入图片描述
5.类的继承:
在class 类名(父类)
父类为该类继承的类,该类可以使用使用父类的方法与属性

class Animal(object):
    age = 11
    def __init__(self, name):
        self.name = name
    def eat(self, food):
        print(f'eating {food}!')
    def play(self, toy):#self为实例对象
        print(f'{self.name} is playing {toy}!')
    def sleep(self):
        self.eat('rice')
        print('sleeping!')

class Dog(Animal):#能继承父类的属性和方法
    def bark(self):
        print(f'{self.name} is barking!')

dog = Dog('Teddy')
dog.play('tp')
dog.bark()
#子类同样会继承父类的实例属性

输出:
在这里插入图片描述

6.方法的重写:
子类可以在类中重写父类的方法,名字一样,会覆盖掉父类的方法:

class Animal(object):
    age = 11
    def __init__(self, name):
        self.name = name
    def eat(self):
        print(f'eating food!')
    def play(self, toy):#self为实例对象
        print(f'{self.name} is playing {toy}!')
    def sleep(self):
        self.eat('rice')
        print('sleeping!')


class Dog(Animal):#能继承父类的属性和方法
    def bark(self):
        print(f'{self.name} is barking!')
    def eat(self):
        print(f'{self.name} is eating dogfood')

dog = Dog('Teddy')
dog.eat()
#子类会优先调用自身的方法,自身的方法不存在才会调用父类的方法
#这种方法称为方法的重写

同样在子类中重写Init方法也会覆盖掉父类的init方法,如果不想覆盖掉,可以使用super方法来访问父类的init方法

class Animal(object):
    age = 11
    def __init__(self, name):
        self.name = name
    def eat(self, food):
        print(f'eating {food}!')
    def play(self, toy):#self为实例对象
        print(f'{self.name} is playing {toy}!')
    def sleep(self):
        self.eat('rice')
        print('sleeping!')

class Dog(Animal):#能继承父类的属性和方法
    def __init__(self, name, gender):
        super().__init__(name)#子类的init会覆盖掉父类的init,要保留要使用super调用父类的init方法
    def bark(self):
        print(f'{self.name} is barking!')

dog = Dog('Teddy', 'male')
dog.bark()

猜你喜欢

转载自blog.csdn.net/weixin_45486992/article/details/113725375