day17知识点

# 一、面向对象编程

## 1.编程思想

# 1)面向过程编程(穷人)   -  一遇到问题马上想到代码实现解决问题的逻辑来解决问题
# 工具:逻辑、算法
# 2)函数式编程(小资)  - 一遇到问题马上想到有没有一个已经存在函数能够帮我解决这个问题;如果没有自己定义一个可以解决这类问题的函数...
# 工具:函数
# 3)面向对象编程(土豪)  - 一遇到问题马上想到有没有一个对象拥有解决这个问题的能力,如果没有就自己创造能够创造这种对象的类
# 工具:类、对象

# 二、认识类和对象

## 1.什么是类,什么是对象

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

从生活的角度来看:
如果人是类,余婷就是人的对象,骆昊是人的另外一个对象
如果车是类,自行车、汽车、公交车是车类的子类(分类), 具体的某一辆车才是对象
"""

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

"""
语法:
class 类名:
    类的说明文档
    类的内容(类的属性和类的方法)
    
说明:
class   -   关键字;固定写法
类名     -   程序员自己命名;
            要求:是标识符;不能是关键字
            规范:驼峰式命名,首字母大写; 见名知义; 不使用系统提供的模块名、类名、函数名...
类的说明文档  -   使用三个双引号引起来的注释, 主要是用来对类的功能进行说明。(可有可无)
类的内容    -   包括类的属性(类属性和对象属性)和类的方法(对象方法、类方法和静态方法)
"""
class Student:
    """
    这是一个学生类
    属性:性别、年龄、学号、专业
    功能:
    """
    def __init__(self):
        self.name = '小明'
        self.age = 18
        self.study_id = '001'
        self.major = '计算机'

    def study(self):
        print('good good study, day day up!')

    def play(self):
        print('召唤师峡谷约一波~')


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)

## 3.创建对象

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

# 创建Circle类的对象
c1 = Circle()

#三、构造方法和初始化方法

## 1.什么是构造方法(函数)

# 名字和类同名,功能是创建对应的类的对象的函数。
# python在定义类型的时候,系统会自动为这个类创建对应的构造方法

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

## 2.初始化方法: init

class Person:
    def __init__(self):
        print('init')


p1 = Person()
p2 = Person()


class Dog:
    def __init__(self, name, age, gender='公狗'):
        print('init:', name, age, gender)


d1 = Dog('大黄', 3)
d2 = Dog(name='小白', age=2)
d3 = Dog('旺财', age=4)
d4 = Dog('财财', 3, '母狗')

#四、类的属性

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

class Person:
    a = 10

    def __init__(self):
        self.name = '张三'
        self.age = 18
        self.gender = '男'


# 使用类属性
print(Person.a)
Person.a = 100
print(Person.a)

# 使用对象属性
p1 = Person()
print(p1.name, p1.age, p1.gender)
p1.name = '小明'
print(p1.name, p1.age, p1.gender)

p2 = Person()
print(p2.name, p2.age, p2.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)

# 五、类的对象

## 1.方法

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

##2.对象方法

class Student:
    def study(self):
        # self=s1
        print('self:', self)
        print('学习')

    def eat(self, food):
        print('吃东西:', food)

    def func1(self):
        print('函数!')


# 通过对象调用对象方法
s1 = Student()
print('s1:', s1)
s1.study()   # study(s1)


class Rectangle:
    def __init__(self, width=100, height=100):
        self.width = width
        self.height = height

    def area(self):
        # self=r1; self=r2
        return self.width * self.height


r1 = Rectangle(100, 20)
result = r1.area()    # area(r1)
print(result)

r2 = Rectangle(50, 80)
result = r2.area()     # area(r2)
print(result)


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

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


p1 = Point(10, 10)
p2 = Point(30, 40)
result = p1.distance(p2)    # distance(p1, p2)
print(result)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值