0
点赞
收藏
分享

微信扫一扫

Python学习之类、方法、属性和继承的汇总分析(详细)

登高且赋 2022-02-16 阅读 8

目录

一、类

创建类:

二、方法:

(1)创建方法:

(2)调用方法:

①通过实例对象来调用:

②通过类直接来调用(需要传递一个实例对象):

③程序在实例化对象的同时,会自动调用。

三、属性:

1、实例属性:

2、类属性(类变量):

四、类的继承:

1、语法规则:

 2、继承中方法的重写:

3、调用父类的方法__init__( ):


一、类

创建类:

语法规则:class 类名(object):

pass

class:关键字 类名:大驼峰(每个单词首字母大写) object:默认继承

类不能够直接使用,需要把它转化为一个实例后,才能直接使用,通过类来生成实例对象的过程称为实例化。

 创建实例对象的方法:类名()

class Person(object):
    pass
class Animal(object):
    pass
andy = Person()
jack = Person()
dog = Animal()
cat = Animal()

二、方法:

方法一般表示这个对象的行为,通常是对象的行为。分为方法__init__( )和普通方法。

(1)创建方法:

语法结构:def 方法名(self,args):

                pass

def:关键字 方法名:需要全部小写 self:实例对象 args:参数

方法名全部小写用“_”分割,例如:get_student_name;get_goods_order

(2)调用方法:

①通过实例对象来调用:

class Animal(object):
    def eat(self,food):
        print(f"正在吃{food}")
    def play(self):
        print("正在玩耍")
    def sleep(self):
        print("正在睡觉")
dog = Animal()
dog.eat("狗粮")
dog.play()
dog.sleep()

运行结果:

②通过类直接来调用(需要传递一个实例对象):

class Animal(object):
    def eat(self, food):
        print(f"正在吃{food}")
    def play(self):
        print("正在玩耍")
    def sleep(self):
        print("正在睡觉")
dog = Animal()
Animal.eat(dog,"狗粮")
Animal.play(dog)
Animal.sleep(dog)

运行结果:

 

class Animal(object):
    def eat(self, food):
        print(f"正在吃{food}")
    def play(self):
        print("正在玩耍")
    def sleep(self):
        self.eat("狗粮") # dog.eat("狗粮")
        print("正在睡觉")
dog = Animal()
dog.sleep() # Animal.sleep(dog)

运行结果:

 

③程序在实例化对象的同时,会自动调用。

这是一种特殊的方法:__init__初始化方法。在这个方法的名称中,开头和末尾各有两个下划线,这是一种约定,旨在避免python默认方法与普通方法发生名称冲突。务必确保__init__( )的两边都有两个下划线,否则当你使用类来创建实例时,将不会自动调用这个方法,进而引发难以发现的错误。

那么如何初始化呢?就是在定义这个方法的时候,定义一些需要初始化的参数,形参self必不可少,而且必须位于其它形参的前面,其它形参可以没有,也可以是多个。传递参数时不需要传递self,因为每个与实例相关联的方法调用都自动传递实参self,它是一个指向实例本身的引用,让实例能够访问类中的属性和方法,但是如果有其它形参,我们就需要传递与之对应的实参。还有需要注意的是,由于__init__( )会优先运行,所以通常我们会将这个方法写在所有方法的最前面。

class Animal(object):
    def __init__(self,name,age):
        self.name = name
        self.age = age
        print("我是动物")
    def eat(self, food):
        print(f"正在吃{food}")
    def play(self):
        print(f"{self.name}今年{self.age}岁,正在玩耍")
    def sleep(self):
        print("正在睡觉")
dog = Animal("泰迪",10)
dog.play()
pig = Animal("小猪佩奇",8)
pig.play()

 运行结果:

三、属性:

可以通过实例访问的变量为属性。分为实例属性类属性

1、实例属性:

格式:实例.属性

class Animal(object):
    def __init__(self,name,age):
        self.name = name
        self.age = age
        print("我是动物")
    def eat(self, food):
        print(f"正在吃{food}")
    def play(self):
        print(f"{self.name}今年{self.age}岁,正在玩耍")
    def sleep(self):
        print("正在睡觉")
dog = Animal("泰迪",10)
dog.play()
dog.gender = "男"
print(dog.gender)

运行结果:

 

class Animal(object):
    age = 5
    def eat(self,food):
        print(f"正在吃{food}")
    def play(self):
        print("正在玩耍")
    def sleep(self):
        print("正在睡觉")
dog = Animal()
pig = Animal()
print(dog.age)
print(pig.age)
print(Animal.age)

2、类属性(类变量):

定义的方法与变量相似。定义的位置在类的内部,在其它函数的外面。类属性对于每一个实例对象都是通用的,即实例对象可以共享类的属性。调用类属性可以通过实例对象来调用,也可以通过类来直接调用。

当我们创建一个类时,创建一个类属性并赋值。把类实例化为两个实例对象。则这两个实例对象都会有一个属性值,值为类属性的值。

class Animal(object):
    age = 5
    def eat(self,food):
        print(f"正在吃{food}")
    def play(self):
        print("正在玩耍")
    def sleep(self):
        print("正在睡觉")
dog = Animal()
pig = Animal()
print(dog.age)
print(pig.age)
print(Animal.age)

运行结果:

 

但是,当我们把其中一个对象动态地生成一个属性,并赋值,那么这个对象就不会继承类属性的值了,然而另一个没有改动的对象的属性的值依然是类属性的值。

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.age = 10
pig = Animal()
print(f"dog的age是{dog.age}")
print(f"pig的age是{pig.age}")
print(f"Animal的age是{Animal.age}")

运行结果:

 

四、类的继承:

1、语法规则:

编写类时,并非总是要从空白开始。如果编写的类时另一个现成类的特殊版本,可使用继承。一个类继承另一个类时,将自动获得另一个类的所有属性和方法。原有的类成为父类,而新的类成为子类。子类继承了父类的所有属性和方法,同时还可以定义自己的属性和方法。创建子类时,父类必须包含在当前文件夹中,且位于子类前面。

类的语法规则为:class 类名(object):

                          pass

如果要对这个类使用继承,则将object改为一个父类的名称:

 

class Animal(object):
    age = 5
    def __init__(self,name):
        self.name = name
    def eat(self):
        print(f"{self.name}正在吃东西")
    def play(self):
        print(f"{self.name}正在玩耍")
    def sleep(self):
        print(f"{self.name}正在睡觉")
class Dog(Animal):
    def bark(self):
        print(f"{self.name}会汪汪叫")
class Pig(Animal):
    def buu(self):
        print(f"小猪会咘咘叫")
dog = Dog("腊肠狗")    #当我们在实例化子类时,会自动调用父类的初始化方法,因此要传递参数name
dog.eat()
dog.bark()
print(dog.age)

运行结果: 

 

 2、继承中方法的重写:

当子类中含有与父类相同的方法时,子类会优先调用自身的方法,如果自身的方法不存在,才去调用父类的方法。(子类重写父类的方法)

class Animal(object):
    age = 5
    def __init__(self,name):
        self.name = name
    def eat(self):
        print(f"{self.name}正在吃东西")
    def play(self):
        print(f"{self.name}正在玩耍")
    def sleep(self):
        print(f"{self.name}正在睡觉")
class Dog(Animal):
    def eat(self):
        print(f"{self.name}正在吃狗粮")
    def bark(self):
        print(f"{self.name}会汪汪叫")
class Pig(Animal):
    def eat(self):
        print(f"{self.name}正在吃猪粮")
    def buu(self):
        print(f"小猪会咘咘叫")
dog = Dog("腊肠狗")
dog.eat()
pig = Pig("家猪")
pig.eat()

 运行结果:

3、调用父类的方法__init__( ):

当子类和父类同时含有方法__init__( )时,子类的初始化方法会覆盖掉父类的初始化方法。但是我们在既有类的基础上编写新类时,通常要调用父类的方法__init__( ),这时我们如果想要保留父类的初始化方法时,需要使用super()函数,super含有上级的意思,这个函数就表示调用子类的上级,即父类。格式为super( ).__init__(args).如果父类的初始化方法中含有参数,则子类的初始化方法中也应含有相应的参数,然后通过args接收。

class Animal(object):
    def __init__(self,name):
        self.name = name
    def eat(self):
        print(f"{self.name}正在吃东西")
    def play(self):
        print(f"{self.name}正在玩耍")
    def sleep(self):
        print(f"{self.name}正在睡觉")
class Dog(Animal):
    def __init__(self,name,age):
        super().__init__(name)
        self.age = age
    def eat(self):
        print(f"{self.name}今年{self.age}岁了,正在吃狗粮")
    def bark(self):
        print(f"{self.name}会汪汪叫")
dog = Dog("腊肠狗",10)
dog.eat()

运行结果:

 

 

举报

相关推荐

0 条评论