python十七章:面向对象基础

面向对象基础

类:类就是拥有相同功能和相同属性的对象的集合。 (类是是抽象的)

对象: 类的实例就是对象 (对象是具体的)

定义类 - 通过代码来描述清楚你是拥有哪些相同属性和哪些相同功能的对象的集合

语法:
class 类名:
类的说明文档
类的内容(类的属性和类的方法)

创建对象

语法:
类名()

class Circle:
    pi = 4.1315926

    def __init__(self):
        self.r = 0

    def area(self):
        print(Circle.pi*self.r**2)

    def perimeter(self):
        print(2*Circle.pi*self.r)

# 创建两个Student类的对象
s1 = Student()
s2 = Student()
print(s1 is s2)    # False
print(id(s1), id(s2))
print(s1)
print(s2)

===============构造方法与初始化

什么是构造方法(函数)

名字和类同名,功能是创建对应的类的对象的函数。

python在定义类型的时候,系统会自动为这个类创建对应的构造方法

魔法方法:类中用__开头并且用__结尾的函数,统称为魔法方法。这一类方法不需要程序员去调用,系统会在合适的时候自动调用

初始化方法:_init_

当通过类创建对象的时候,系统会自动调用这个类中的__init__方法

在类中添加__init__方法的时候,只要保证方法名和默认参数self不动以外,程序员可以根据情况随意添加参数和函数体

调用构造方法创建对象的时候需不需要参数,需要几个参数看对应类中的__init__方法除了self以外有没有额外的形参,有几个

==========类的属性

类中的属性分为:类属性(类的字段)和对象属性

类属性

定义:直接定义在类里面函数外面的变量
特点:不会因为对象不同而不一样
怎么用:类名.类属性

对象属性

定义:在__init__函数中,以 ‘self.属性名=值’ 的形式来定义
特点:会因为对象不同而不一样
怎么用:对象.对象属性

class Person:
    a = 10

    def __init__(self):
        self.name = '张三'
        self.age = 18
        self.gender = '男'
class Dog:
    def __init__(self, name, color, gender='母狗', breed='土狗'):
        self.name = name   # 每次创建狗的对象的时候必须给name属性传参
        self.gender = gender  # 每次创建狗的对象的时候可以不给gender赋值,也可以给gender赋值。如果不赋值默认值是'母狗'
        self.age = 1      # 每次创建狗的对象的时候age的值只能是1
        self.color = color
        self.breed = breed

    # __repr__魔法方法:打印当前类的对象的时候,系统会自动调用这个方法,并且把这个方法的返回值作为打印结果(返回值必须是字符串)
    def __repr__(self):
        # self: 打印谁self就指向谁
        # return str(self.__dict__)
        return f'<{str(self.__dict__)[1:-1]}>'

d1 = Dog('大黄', '黄色')
print(d1.name, d1.color, d1.gender, d1.age, d1.breed)

d2 = Dog('小白', '白色', breed='哈士奇')
print(d2)

======================类的方法

定义在类中的函数就是方法。类中的方法分为:对象方法、类方法、静态方法

对象方法

怎么定义:直接定义在类中的函数就是对象方法(定义函数前不加装饰器)
特点:自带参数self;调用的时候参数self不需要传参,系统会自动将当前对象传给self(谁调用self就指向谁)

list
list1 = [100,20]
list1.append(42)
print(list1)    [100,20,40]
此处append后有两个参数,其中一个就是self,不给值,list1.了这个对象,self就指向list1

怎么调用:通过 对象.方法名() 的形式来调用
什么时候用:如果实现函数的功能需要用到对象属性的时候

练习:定义一个点类(二维),有属性: x坐标、y坐标  方法:计算当前点到指定点的距离
class Point:
    def __init__(self,x,y):
        self.x = x
        self.y = y

    def distance(self,self2):
        return ((self.x-self2.x)**2+(self.y-self2.y)**2)**0.5


p1 = Point(10,20)
p2 = Point(20,30)
result = p1.distance(p2)
print(result)

你可能感兴趣的:(The,first,week,python,编程语言,面向对象编程)