Python学习第十一天

类的创建

语法

class 类名:
      pass

类名由一个或多个字母组成,首字母大写,其他字母小写。
直接写在类里的变量,成为类属性。
在类里定义的函数,成为类方法。

class Student:
    name = '张三'  # 类属性

    def eat(self):  # 实例方法
        print(self.name + '在吃饭')

使用@staticmethod注解来定义静态方法。

    @staticmethod # 静态方法
    def drink():
        print('在喝水')

使用@classmethod注解来定义类方法

    @classmethod
    def study(cls):
        print('在学习')

初始化函数

    def __init__(self, name, age):
        self.name = name
        self.age = age  # 实例属性

对象的创建

语法:实例名 = 类名([参数])

class Student:
    childhood_name = '张三'  # 类属性

    def __init__(self, name, age):
        self.name = name
        self.age = age  # 实例属性

    def eat(self):  # 方法
        print(self.name + '在吃饭')

    @staticmethod
    def drink():
        print('在喝水')

    @classmethod
    def study(cls):
        print('在学习')


stu = Student('xyq', 20)
print(stu.name)
print(stu.childhood_name)
print(stu.age)

####
xyq
张三
20

方法的调用

stu = Student('xyq', 20)
stu.eat()
Student.eat(stu)
####
xyq在吃饭
xyq在吃饭

类属性的使用

相当于类中的静态变量,使用类名.属性名来调用。

print(Student.childhood_name)

####
张三

类方法的使用

使用类名.方法名()来调用。参数是类名

Student.study()

####
在学习

静态方法的调用

使用类名.方法名()来调用,没有参数。

Student.drink()

####
在喝水

动态绑定属性和方法

class Student:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def eat(self):
        print(self.name + '在吃饭')


stu1 = Student('shy', 21)
stu2 = Student('xyq', 20)
stu2.gender = '男'  # 为stu2动态绑定属性
print(stu1.name, stu1.age)
print(stu2.name, stu2.age, stu2.gender)

def show():
    print('这是函数,即将绑定在类上')

stu2.show = show
stu2.show()

####
shy 21
xyq 20 男
这是函数,即将绑定在类上

面向对象的三大特征

封装、继承、多态

封装

私有变量约定用__变量来表示

class Student:
    def __init__(self, name, age):
        self.name = name
        self.__age = age  # __age为私有变量,不希望外部访问

    def show(self):
        print(self.name + f'今年{self.__age}岁')


stu = Student('xyq', 20)
stu.show()

####
xyq今年20岁

继承

默认继承Object,支持多继承。
子类必须调用父类的构造方法。
语法:

class 子类(父类1,父类2,...,父类n)
      pass
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
        print('Person类的构造函数')

    def info(self):
        print(self.name, self.age)


class Student(Person):
    def __init__(self, name, age, score):
        super().__init__(name, age)
        self.score = score
        print('Student类的构造函数')


Jack = Student('Jack', 17, 89)
Jack.info()   # 继承来的方法

####
Person类的构造函数
Student类的构造函数
Jack 17

方法重写

子类可以重写父类中的方法,重写后可以使用super().方法()来调用。

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

    def info(self):
        print(self.name, self.age)


class Student(Person):
    def __init__(self, name, age, score):
        super().__init__(name, age)
        self.score = score

    def info(self):
        print(self.name, self.age, self.score)


Jack = Student('Jack', 17, 89)
Jack.info()

####
Jack 17 89

Object类

是所有类的父类

多态

多态就是多种形态,在不确定对象类型时,也可以调用方法,在运行过程中动态决定调用方法的主体。

class Animal:
    def eat(self):
        print('动物要吃东西')


class Dog(Animal):
    def eat(self):
        print('狗要吃东西')


class Cat(Animal):
    def eat(self):
        print('猫要吃东西')


def fun(animal):
    animal.eat()


fun(Animal())
fun(Dog())
fun(Cat())

####
动物要吃东西
狗要吃东西
猫要吃东西

特殊方法和特殊属性

  1. dict
    获取属性:值的字典
class A:
    def __init__(self, name):
        self.name = name


a = A('Tom')
print(a.__dict__)

####
{'name': 'Tom'}
  1. class
    输出对象所属的类
print(a.__class__)

####
<class '__main__.A'>
  1. bases
    获取类的父类元组
class A:
    pass


class B(A):
    def __init__(self, name):
        self.name = name


print(B.__bases__)

####
(<class '__main__.A'>,)
  1. mro
    获取类的层次结构
class A:
    pass


class B(A):
    def __init__(self, name):
        self.name = name


print(B.__mro__)

####
(<class '__main__.B'>, <class '__main__.A'>, <class 'object'>)

可以看到,B继承A,B继承object

  1. subclasses()
    查看类的子类
class A:
    pass


class B(A):
    def __init__(self, name):
        self.name = name


print(A.__subclasses__())

####
[<class '__main__.B'>]
  1. add()
    实现两个对象的相加操作。
class A:
    def __init__(self, name):
        self.name = name

    def __add__(self, other):
        return self.name + other.name


a1 = A('Tom')
a2 = A('Jack')
print(a1 + a2)

####
TomJack
  1. len()
    获取对象的长度。
class A:
    def __init__(self, name):
        self.name = name

    def __len__(self):
        return len(self.name)


a1 = A('Tom')
print(len(a1))

####
3
  1. init()
posted @ 2021-02-06 14:29  sxhyyq  阅读(55)  评论(0编辑  收藏  举报