day17 - 类和对象总结

18.类和对象

1.对象方法
"""
定义在类里面的函数
1)怎么定义:直接定义(不需要添加装饰器)在类中的函数就是对象方法

2)怎么调用:通过 "对象.xx()" 的形式调用

3)特点是什么:每个对象方法都有一个默认参数self,self不需要传参,
            系统会自动将当前对象传给self(self谁调用就指向谁)

"""
class Person:

    def eat(self,name='二娃'):
        print(f'{name}正在吃吃饭')


p1 = Person()
p1.eat()
2.初始化方法 - init

"""
__init__:是python类中一个特殊的对象方法,也是魔法方法。
魔法方法:类中方法以__开头并且以__结尾,系统自带。魔法方法不需要主动调用,系统会在特定的情况下自定调用。

1) __init__ 方法会在创建对象的时候被自动调用
2) 通过类创建对象的时候需不需要参数,看__init__的参数有几个参数。

"""

2.属性

1.类中的属性

# 定义类就是使用代码来描述这个类拥有那些相同特征的食物的总和。
# 如果特征是通过数据来体现的,那么这种特征就用属性来表示
"""
1)类属性
a.怎么定义: 直接定义在类中的变量就是类属性
b.怎么使用:通过类.xx的方式
c.什么时候用:属性值不会因为对象不同而不一样的时候就使用类属性


2)对象属性
a.怎么定义:以"self.xx = 值"的形式定义在__init__方法中
b.怎么使用: 通过
c.什么时候用:属性值会因为对象不同而不同而不一样的时候就使用对象属性

"""
class A:
    # a和name就是类属性
    a = 10
    name = '阿达'

    # b和gender就是对象属性
    def __init__(self, name, age=28, gender='男'):
        self.name = name
        self.age = age
        self.gender = gender

        self.x_labsl = []
        self.y_labsl = []

    def nen(self, hobby='耍大炮'):
        print(f'我是{self.name},{self.gender},今年{self.age}岁')
        print(f'嗜好:{hobby}')


print(A.a)
print(A.name)

x = A('邱新海', 21)

x.nen()
2.对象属性默认值

"""
1)方式1:使用固定值(主要用于这个属性值在绝大多部分情况下都是一个值,极少数情况会变化的时候)
2)方式2:在__init__中提供给这个属性赋值形参,形参没有默认值(属性一般都不要样的时候,创建一个属性值)

"""
# 练习:定义圆类,拥有属性:圆周率、半径  拥有的方法:计算面积、计算周长
class P:
    pi = 3.1415926

    def __init__(self, r):
        self.r = r

    def area(self):
        """ 计算圆面积"""
        return '半径为:{self.r}时,面积:{P.pi * self.r ** 2 :.2f}'

    def perimeter(self):
        """ 计算圆周长"""
        return '半径为:{self.r}时,周长:{2 * P.pi * self.r:.2f}'


p = P(5.67)
p.area()
p.perimeter()

3.方法

  1. 方法

"""
1)对象方法:
a.怎么定义:直接定义
b.怎么调用:对象.xx()
c.特点:self
d.什么时候用:如果要使用对象属性,就使用对象方法
 
 
2)类方法:
a.怎么定义:定义函数前加@classmethod装饰器
b.怎么调用:类.xx()
c.特点:自带参数cls,调用的时候不用传参,系统会把当前类传给cls
d.什么时候用:在不需要对象属性的情况下需要类就使用类方法


3)静态方法:
a.怎么定义:定义函数前加@staticmethod装饰器
b.怎么调用:类.xx()
c.特点:没有特点
d.什么时候用:实现函数功能什么(类方法,对象方法)也不需要,就使用静态方法

"""
class A:
    def func1(self):
        print('对象方法')

    @classmethod
    def func2(cls):
        print('类方法')

    @staticmethod
    def func3():
        print('静态方法')


a = A()
a.func1()

A.func2()
A.func3()

4.对象属性的增删改

class A:
    def __init__(self, name, stuid, age=18):
        self.name = name
        self.age = age
        self.stuid = stuid

        self.score = 0

    # 当print的时候,返回return返回的值,只能是str,
    # 打印的是谁,self就是谁
    def __repr__(self):
        # return f"名字:{self.name}| 年龄:{self.age}| 学号:{self.stuid}"
        return str(self.__dict__)

    def n(self, score):
        return f"名字:{self.name}| 年龄:{self.age}| 学号:{self.stuid}| 分数:{self.score + score}"


a = A('曾睿', 'stu001')
print(a)
print(a.n(23))
1.查 - 获取属性值

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

"""
2.增、改


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

"""
3.删除

"""
del 对象.属性     -   没有就报错
delattr(对象,属性名)    -   

"""
4 slots 属性


class B:
    # __slots__  属性只能有a,b,c
    __slots__ = ('a', 'b', 'c')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值