Python定义类与创建对象

目录

1. 定义类

2. 创建与使用对象(对象也称为实例)

1)增加或删除实例变量

2)增加实例方法


面向对象编程的三大特征:封装、继承、多态;

1. 定义类

语法格式:

# 语法格式:
class 类名:
    执行语句...
    类变量...
    方法...

类名:一个或者多个单词连接而成,每个单词首字母大写,其余字母全部小写,单词与单词之间不使用分隔符;

类包含的类变量可以动态增加或删除,程序在类定义中为新变量赋值就是增加类变量,程序可以在任何地方为已有的类增加变量,也可以通过del语句删除已有类的类变量;

对象的变量也可以动态增加或删除,只要对对象的新变量赋值就是增加变量,可通过del语句删除已有对象的变量;

定义方法与定义函数相同,但类中的方法第一个参数要定义为self,用于自动指向调用该方法的对象;

特殊的方法:__init__,这个方法叫做构造方法,用于构造该类的对象,Python通过调用构造方法生成对象;如果开发者没有定义构造方法,Python会自动为该类定义一个只包含self参数的默认的构造方法;

2. 创建与使用对象(对象也称为实例)

语法格式:

对象变量 = 类名()
# 本质是调用类里面的构造方法创建对象

对象访问方法或者变量的语法格式: 对象.变量|方法(参数)

class Dog:
    def __init__(self, sex="公", classification="二哈"):
        # 为Dog对象定义了两个实例变量,self表示调用该函数的对象,self.变量就是实例变量
        self.sex = sex
        self.classification = classification

# 创建对象的本质是根据构造函数创建对象,所以参数值要与构造函数的参数相匹配
# 如果不传入参数,因为有默认参数值,对象将按照默认参数值创建
# 如果没有默认参数值,并且创建对象不传入参数值,程序将出现错误
my_dog_1 = Dog()
print(my_dog_1.sex, my_dog_1.classification)
# 公 二哈
my_dog_2 = Dog("母", "斗牛犬")
print(my_dog_2.sex, my_dog_2.classification)
# 母 斗牛犬

1)增加或删除实例变量

增加实例变量:为新变量赋值即可;

删除实例变量:del语句;

my_dog_2.name = "林林"
print(my_dog_2.name)
# 林林
del my_dog_2.sex
print(my_dog_2.sex)
# 程序错误:AttributeError: 'Dog' object has no attribute 'sex'

2)增加实例方法

!!!为对象动态增加的方法,python不会自动将第一个参数self指向调用的对象;

# 先定义一个函数
def feed_food(self, type):
    if type=="breakfast":
        print("1号类型狗粮")
    elif type=="lunch":
        print("2号类型狗粮")
    else:
        print("3号类型狗粮")

# 使用函数feed_food对对象my_dog_2的方法food赋值
my_dog_2.food = feed_food
# 手动指定self参数为调用者
my_dog_2.food(my_dog_2, "lunch")
# 2号类型狗粮

使用MethodType可以将动态增加的方法设置为自动将第一个参数指向调用者:可以看到调用该方法时不需要指定第一个参数为调用者了;

from types import MethodType
my_dog_2.food = MethodType(feed_food, my_dog_2)
my_dog_2.food("lunch")
# 2号类型狗粮

当Python对象的一个方法调用其他方法时,不可以省略self;

class Dog:
    def __init__(self, sex="公", classification="二哈"):
        # 为Dog对象定义了三个实例变量
        self.sex = sex
        self.classification = classification
        self.health = 1
    def is_dog_healthy(self):
        if self.health == 1:
            return True
        else:
            return False

    def feed_food(self, type):
        # 该方法调用其他方法self不能省略
        if self.is_dog_healthy()==False:
            print("狗狗得病了需要吃好的")
        elif type == "breakfast":
            print("1号类型狗粮")
        elif type == "lunch" :
            print("2号类型狗粮")
        else:
            print("3号类型狗粮")

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值