python基础学习笔记08——类和对象 继承 多态 类属性和实例属性 类方法和静态方法

1. 类和对象

1.1 定义
语法:
class 类名():
代码

1.2 创建对象
语法:
对象名 = 类名()

class Animal():
    def func(self):
        print("animal")

animal = Animal()
animal.func()

1.3 属性
类外添加对象属性:
语法:
对象名.属性 = 值

类外获取对象属性:
语法:
对象名.属性

class Person():
    def func(self):
        print("person")

p = Person()
p.name = "Tom"
p.age = 18
print(f"姓名{p.name},年龄:{p.age}")

类内获取对象属性:
语法:
self.属性名

class Person():
    def func(self):
        print(f"姓名:{self.name},年龄:{self.age}")

p = Person()
p.name = "Tom"
p.age = 18
p.func()

1.4 魔法方法
1.4.1 _ init _
作用:初始化对象

class Person():
    def __init__(self):
        self.name = "Tom"
        self.age = 18
    def func(self):
        print(f"姓名:{self.name},年龄:{self.age}")

注意:
_ init _在创建一个对象时默认被调用,不需要手动调用(相当于C++构造函数)
_ init _中的self参数,不需要开发者传递

# 带参数的_init_()
class Person():
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def func(self):
        print(f"姓名:{self.name},年龄:{self.age}")

1.4.2 _ str _
当使用print输出对象的时候,默认打印对象的内存地址。如果定义了_ str _方法,那么就会打印这个方法中的return数据。用于输出对象状态

class Person():
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def __str__(self):
        return "Person"

p = Person("Tom",18)
print(p)	# Person

1.4.3 _ del _
当删除对象时,调用_ del _()方法

class Person():
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def __del__(self):
        print(f"姓名:{self.name},年龄:{self.age}")

p = Person("Tom",18)
del p

2. 继承

2.1 语法
class 父类名():
代码
class 子类名(父类名):
代码

多继承:

class Father():
    def __init__(self):
        self.hair = "black"
    def __str__(self):
        return self.hair

class Mother():
    def __init__(self):
        self.hair = "brown"
    def _str_(self):
        return self.hair

class Son(Father,Mother):
    pass

s = Son()
print(s)

当一个类有多个父类时,默认使用第一个父类的同名属性和方法
子类可以重写父类的方法

2.2 子类调用父类的同名属性和方法

class Father():
    def __init__(self):
        self.hair = "black"
    def __str__(self):
        return self.hair

class Mother():
    def __init__(self):
        self.hair = "brown"
    def _str_(self):
        return self.hair

class Son(Father,Mother):
    def __init__(self):
        self.hair = "blond"
        #调用父类的方法,但是为保证调用到的也是父类的属性,必须在调用方法前调用父类的初始化
    def father_hair(self):
        Father.__init__(self)
    def mother_hair(self):
        Mother.__init__(self)
    def son_hair(self):
        # 如果先调用了父类的属性和方法,父类属性会覆盖子类属性故先调用子类的属性初始化
        self.__init__()
    def _str_(self):
        return self.hair

s = Son()
s.father_hair()
print(s)
s.mother_hair()
print(s)
s.son_hair()
print(s)

2.3 super()调用父类方法
语法1:
super(当前类名,self).函数()
语法2:
super().函数()

    def parents_hair(self):
        super().__init__()
    def son_hair(self):
        super(Son,self).__init__()

2.4 私有权限
语法:
self.__ 属性名=值
self.__ 函数名():

class Father():
    def __init__(self):
        self.__money = 1000		# 私有权限
class Son(Father):
    pass

3. 多态

多态是一种使用对象的方式,子类重写父类方法,调用不同子类对象的相同父类方法,可以产生不同的执行结果

class Father():
    def func(self):
        print("father")

class Son(Father):
    def func(self):
        print("son")

class Daughter(Father):
    def func(self):
        print("daughter")

class Person():
    def person_func(self,p):
        p.func()

s = Son()
d = Daughter()
p = Person()
p.person_func(s)
p.person_func(d)

4. 类属性和实例属性

类属性就是类对象所拥有的属性,它被该类的所有实例对象所共有
类属性可以使用类对象或实例对象访问
语法:类名.属性名
类属性优点:
记录的某项数据始终保持一致时,则定义类属性
实例属性要求每个对象为其单独开辟一份内存空间来记录数据,而类属性为全类所共有,仅占用一份内存,更加节省内存空间

类属性只能通过类对象修改,不能通过实例对象修改
语法:类名.属性名=值

5. 类方法和静态方法

5.1 类方法
需要用装饰器@classmethod来标识其为类方法,对于类方法,第一个参数必须是类对象,一般以cls作为第一个参数

# 当方法中需要使用类对象时,定义类方法,类方法一般和类属性配合使用
class Father():
    __money = 100
    @classmethod
    def get_money(cls):
        return cls.__money

5.2 静态方法
需要用装饰器@staticmethod来进行修饰,静态方法既不需要传递类对象也不需要传递实例对象
静态方法也能通过实例对象和类对象去访问

class Person():
    @staticmethod
    def func():
        print("Person")

你可能感兴趣的:(python基础学习笔记)