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

目录

一、类

创建类:

二、方法:

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

运行结果:

 在通过实例对象调用类方法的过程中,传递参数时不用填写self,因为self是一个实例对象,是默认的,第一个参数就是self,程序会默认给self进行一个赋值。因此我们在调用的时候只需要添加第二个参数args。但是实例对象只能调用类中已经定义好的方法,如果没有定义是不能够调用的。

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

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)

运行结果:

在通过类直接来调用类方法的过程中,传递参数时一定要传递一个实例对象(self),当然有参数args时还是要添加参数。这个方法比较麻烦,因此我们多采用通过实例对象来调用类方法。

实例对象的其它作用:当我们实例化完成后,类中每个方法的self都是相同的,因此可以交叉来使用。我们在学习函数嵌套的时候,我们学了在一个函数内可以调用其它函数,类似的在类方法这里也是一样的,实例对象self可以在每个方法中相互之间进行使用,因为每个方法都有self,而方法之间的相互调用,就和函数之间的嵌套调用是一样的。由于self是类的实例对象,一旦类被实例化后,所有的实例对象都是self。

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)

运行结果:

在该代码中self.name和self.gender中,name和gender就是实例属性。实例属性可以在内部定义,通常在__init__初始化方法中定义,也可以动态地定义,即在外部定义。在调用实例属性的时候,我们可以通过self.这种形式来调用。

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

运行结果:

 创作不易!如果觉得还可以的话可以点个赞哦,谢谢!

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
Python中,类是一种对象的抽象表示,其属性方法定义了该对象的特征和行为。下面是Python类的属性方法详细解释: 1. 属性:类的属性是指属于类本身的变量,也称为类变量。可以通过类名或实例对象访问。类属性在类的所有实例对象中共享,如果一个实例对象修改了该属性的值,则会影响到其他实例对象。 2. 实例属性:实例属性是指属于类的实例对象的变量,也称为实例变量。可以通过实例对象访问。每个实例对象都有自己的实例属性,它们在不同实例对象之间是独立的。 3. 方法:类的方法是指属于类的函数,也称为成员函数。可以通过类名或实例对象调用。方法可以访问类的属性和实例属性,并且可以修改它们的值。 4. 静态方法:静态方法是指在类中定义的独立函数,它们与类和实例对象无关。静态方法不能访问类的属性和实例属性,也不能修改它们的值。通常用于实现与类相关的工具函数。 5. 类方法:类方法是指在类中定义的函数,它们与类相关,但不依赖于实例对象。类方法可以访问类的属性方法,但不能访问实例属性方法。通常用于实现与类相关的工具函数。 6. 构造方法:构造方法是在创建实例对象时自动调用的方法,用于初始化实例的属性。构造方法的名称固定为`__init__`,它的第一个参数通常是`self`,表示当前实例对象。 7.析构方法:析构方法是在实例对象被销毁时自动调用的方法,用于清理实例对象的资源。析构方法的名称固定为`__del__`,它没有参数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aaron-ywl

你的鼓励是我创作的最大动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值