python进阶day14

python进阶之路

Day14

hello world!今日是python学习的第十四天,我将会在下面文章对基础语法进行一些介绍,主要为类中的方法、构造函数与init、类中的属性、对象属性的增删改查等。

1 类中的方法

1.1 类中的方法

​ 定义类就是描述清楚这个类是拥有哪些相同的功能和属性的集合。
​ 类中的方法就是对类相同的功能的描述

​ 什么是方法?
​ 方法就是定义在类中的函数,它分为三类:对象方法,类方法,静态方法

1.2 三种方法
1)对象方法

​ 怎么定义:直接定义在类中的函数;
​ 特点:自带一个参数self(如果使用对象去调用对象方法,对象方法中self不用传参)
​ self指向当前对象
​ 怎么调用:对象.方法()

2)类方法

​ 怎么定义:在定义函数前加 @classmethod
​ 特点:自带参数cls(如果使用类去点用类方法,方法中的cls不用传参,系统会自动将当前类传给cls)
​ cls指向当前类
​ 怎么调用:类.方法()

3)静态方法

​ 怎么定义:在定义函数前加 @staticmethod
​ 特点:没有默认参数
​ 怎么调用:类.方法()

class Person:
    # eat就是对象方法
    def eat(self,food = '米饭'):
        # self:谁调用就指向谁
        print('吃饭')
        print('人类吃:',food)

    # sleep也是对象方法
    def sleep(self):
        print('睡觉')
    
    # 类方法
    @classmethod
    def show_num(cls,n):
        print(f'人类的数量:{n}亿')
    
    # 静态方法
    @staticmethod
    def show_message():
        print('人类破坏环境!')


p1 = Person()  self = p1
p2 = Person()  self = p2
print(f'p1:{p1}')
print(f'p2:{p2}')
p1.eat('面条')
p2.sleep()

Person.show_num(60)

Person.show_message()

​ 注意:从语法的角度来看,不管是对象方法,类方法还是静态方法都可以使用类和对象调用。但是实际开发不要这样做。

 Person.eat()   # 不合理

2 构造函数和init

2.1 什么是构造函数 - 函数名和类同名的用来创建的对象的函数/方法。

​ a.函数名与类名同名

​ b.功能是用来创建对象的

​ python中当我们在定义类的时候,系统会自动创建这个类的构造函数。在这个构造方法中会自动调用__new__方法来创建对象,并且用这个创建好的对象来调用__init__对对象进行初始化操作,最后才将对象返回。

2.2 __init__方法

​ __init__是每个类中都有一个特殊的对象方法,是魔法方法(会自动调用);当创建类的对象的时候这个类中的__init__方法会自动调用。

​ 在类中添加__init__方法,只需要保证方法名是__init__,方法是对象方法。

class Dog:
    def __init__(self,x):#方法前后有下划线位魔法方法,自动调用(创建对象的时候)
       print('init方法')
       print(x)

​ def Dog():
​ dog = Dog.__new__()
​ dog.__init__()
​ return dog
​ 当调用构造方法创建对象的时候,系统会自动调用这个类中__init__方法。
​ 调用构造方法创建对象的时候,这个构造方法需不需要参数,需要几个参数,看类中的__init__方法除了self以外需不需要参数,

dog1 = Dog(12)
dog2 = Dog(x=100)

3 类中的属性

3.1 什么是属性

​ 我们通过类中的属性来保存类相关的数据

3.2 属性的分类

​ 类中的属性分为两种:类属性和对象属性

1)类属性(类的字段)

​ a.定义:直接定义在类中的变量就是类属性
​ b.使用:类.属性
​ c.什么时候用:属性值不会因为对象的不同而不一样的时候,就使用类属性

2)对象属性

​ a.定义:定义在__init__方法中,以self.属性=值的形式进行定义(属性自己命名,要求和规范与变量名一样)
​ b.使用:对象.属性
​ c.什么时候用:属性值会因为对象的不同而不一样的时候

a = 100


class Student:
    # num就是类属性
    num = 30

    def __init__(self):
        # name和age就是对象属性
        self.name = '张三'
        self.age = 18


print(Student.num)
print(a)

stu = Student()
print(stu.name,stu.age)


class Circle:
    pi = 3.141592653
    def __init__(self):
        self.radius = 15


class Person:
    def __init__(self,name,gender='男'):
        self.name = name
        self.age = 0
        self.gender = gender

​ 重写__repr__方法可以自定义对象的打印格式;这个方法的返回值就是对象打印结果。

def __repr__(self):
    # 打印谁,self就是谁
    return f'name:{self.name} age:{self.age} gender:{self.gender}'


p1 = Person('小明')
print(p1)

p2 = Person('小花','女')
print(p2)

4 对象属性的增删改查

4.1 对象属性

​ python类对象的属性支持增删改查

class Dog:
    def __init__(self,name,breed='土狗',sex='母狗',age=1):
        self.breed = breed
        self.sex = sex
        self.age = age
        self.name = name


dog1 = Dog('大黄',sex='公狗')
dog2 = Dog('宝贝','哈士奇',age=3)
1) 查 - 获取属性值

​ 对象.属性 - 获取对象指定属性的值
​ getattr(对象,属性名) - 获取对象指定属性的值(如果属性不存在报错)
​ getattr(对象,属性名,默认值) - 获取对象指定属性的值(如果属性不存在返回默认值)

print(dog1.name)
print(getattr(dog1,'name'))
print(getattr(dog1,'color','白色'))
 getattr可以根据变量的值动态获取指定属性的值。
value = input('属性名:')
print(getattr(dog1,value))
2)增、改

​ 对象.属性=值 - 如果属性存在就是修改对象属性值,如果属性不存在就是添加属性
​ setattr(对象,属性名,值) - 如果属性存在就是修改对象属性值,如果属性不存在就是添加属性

dog1.color = '黄色'

setattr(dog1,'name','黄黄')
print(dog1.name)
setattr(dog1,'weight',10)
print(dog1.weight)
3) 删

​ del 对象.属性 - 删除对象的指定属性。

del dog1.age
print(dog1.age)#'Dog' object has no attribute 'age'

delattr(dog1,'name')
print(dog1.name) 'Dog' object has no attribute 'color'
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值