面向对象-类的属性、对象、继承

类:是一个事物的抽象概念。描述该类事物共同的特征和行为

实例对象:某类事物的具体个体

1、类的定义

方式一、

calss  类名:

        pass

方式二、

class 类名(object):

        pass

类名的规范:

    1、遵循大驼峰额命名规范(每个单词的首字母大写)

    2、可以由数字字母下划线组成,不能用数字开头,不要使用关键字

2、 实例化对象

        语法:

        对象 = 类名()

        万物皆对象:所有的数据都是对象

                字符串:str类型的对象

                列表:list类型的对象

# 猫类
class Cat():
    pass

# 实例化对象coffie
coffie = Cat()

3、类的属性和方法

 1、属性

        1)类属性:这类事物都具备这个属性,并且属性值是一样 的

              类属性是所有的对象共有

               类属性的定义:直接定义在类里面的变量

                类名.属性名 = 属性值

        2)对象(实例)属性:对象自己的属性

                实例属性的定义:对象.属性名 = 属性值

# 猫类
class Cat():
    '''类属性'''
    leg = 4
    tail = 1
    eye = 2


coffie = Cat()
# 对象属性
coffie.name = '咖啡猫'

2、方法:定义在类里面的函数叫做方法

方法中的参数除self之外,其他的参数传递和函数是一样的

方法中也是使用return来返回数据的

3、self:代表的是对象自己

class Cat:
    # 类属性
    leg = 4
    tail = 1
    eye = 2
    def func(self):
        print("{}正在抓老鼠".format(self.name))

    def skill01(self):
        print("这换个是爬树的功能")


# 通过猫类创建对象
coffee = Cat()
jingle = Cat()
coffee.name = "加菲猫"
jingle.name = "叮当猫"

# 通过对象调用方法
coffee.func()    # 加菲猫正在抓老鼠
jingle.func()    # 叮当猫正在抓老鼠

4、属性和方法的调用

        类属性的调用:

                1. 可以通过类去调用 ------>  类名.属性名

                2. 可以通过对象去调用  -------->  对象名.属性名

        实例属性的调用:

                只能通过对象调用自己的属性   

        方法的调用:

                1. 不能直接类调用(因为没有对象)

                2. 只能通过对象直接调用

5、初始化方法

初始化方法__init__:在通过类创建对象的时候自动调用的

    在创建对象的时候,给对象设置对象属性"

class Person:
    attr = '类属性1111'

    def __init__(self, name, age, sex):
        """在创建对象的时候,给对象设置对象属性"""
        self.name = name
        self.age = age
        self.sex = sex
        print("这个是---init-----")


musen = Person('MUSEN', 18, '男')
Try = Person('TRY', 18, '男')

print(musen.name)
print(musen.age)
print(musen.sex)
print(Try.name)

6、私有属性:仅供类的内部使用(不要在外部调用)

_单下滑线开头:表示一个私有属性(没有真正的私有化,类外部依然可以调用)

__双下滑线开头:表示一个私有属性(类外部不可以调用)

7、私有方法

_单下划线开头:表示这是一个私有方法(没有真正的私有化,类外部依然可以调用)

__双下滑线开头:表示这是一个私有方法(类外部不可以调用)

class MyTest:
    _num1 = 1
    __num2 = 2

    def _func1(self):
        print('单下划线')

    def __func2(self):
        print('双下划线')

    def func(self):
        print(self.__num2)


my = MyTest
print(my._num1)   # 1
my._func1(my)    # 单下划线
my.func(my)         # 2
# print(my.__num2)   # 不能直接调用 AttributeError: type object 'MyTest' has no attribute '__num2'

8、实例方法

        1. 只能通过对象调用(第一个参数self:代表对象本身)

        2. 适用场景:方法内部如果要使用对象的属性或者方法,就要定义成实例方法

9、类方法

类方法的定义:要先使用@classmethod声明

类方法:

        1. 通过类调用,也可以通过对象调用

        2. 适用场景:方法内部只使用类属性或者类方法(不需要使用对象属性和方法),适合定义为类方法

10、静态方法

静态方法的定义:要先使用@staticmethod声明

静态方法:

        1. 可以通过类调用,也可以对象调用

        2. 适用场景:方法内部(既不需要使用类属性和类方法,也不需要使用对象属性和对象方法),适合定义为静态方法

class MyTest:
    num = 100

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

    def func(self):
        print(self.name)

    # 类方法
    @classmethod
    def func1(cls):
        print(cls.num)

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

11、类的继承

作用:子类通过继承可以获得父类的属性和方法,提高开发的效率及代码的复用率。(__开头的私有属性和方法的除外)

重写父类方法:重写,就是子类中,有一个父类相同名字的方法,在子类中的方法会覆盖掉父类中的方法

调用重名的父类方法:子类重写了父类的方法之后,需要使用固定的语法进行调用

        方式一:父类名.方法名(self)

        方式二:super().方法名

class Phone:

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

    def call(self):
        print("打电话功能")


class PhoneV2(Phone):

    def __init__(self, name, price):
        super().__init__(name)
        self.price = price

    def music(self):
        print(f"名称:{self.name},价格:{self.price},功能:听语音")


huawei = PhoneV2('P30', 7000)
huawei.call()  # 打电话功能
huawei.music()  # 名称:P30,价格:7000,功能:听语音

12、动态属性设置:setattr()

     参数1:对象(类)

     参数2:属性名

     参数3:属性值

# 在代码执行的过程中,给类添加属性
class Demo:
    atter = 100

Demo.name = 'bty'

# 把字典中的键值对设置为类的属性和属性值
data = {"name": "musen", "age": 18, "gender": "男"}
for k,v in data.items():
    setattr(Demo,k,v)
print(Demo.__dict__)

 

13、动态获取属性:getattr()

    参数1:对象(类)

    参数2:属性名

    参数3:(非必传)设置一个属性不存在时返回的默认值(不传,属性不存在则报错)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值