python基础day-17:面向对象基础

本文介绍了编程思想,包括面向过程、函数式和面向对象。接着讲解了Python中的类和对象,定义类的方式,以及如何创建对象。还详细阐述了构造方法(如__init__)、类属性和对象属性的区别,并探讨了对象方法,特别是self参数的使用。
摘要由CSDN通过智能技术生成

 

一、编程思想

1.1 面向过程

🏠自己想要一套房子,就去劈石砍树设计搭建

  • 遇到问题想通过代码逻辑来解决
	工具:逻辑、算法

1.2 函数式

🏠挖掘机在哪?吊车在哪?砖窑呢?

  • 遇到问题想有没有函数能帮助解决这个问题
  • 没有就去定义一个可以解决这类问题的函数
	工具:函数

1.3 面向对象

🏠你好,请问你会造房子吗?

  • 遇到问题想有没有哪些东西有解决这个问题的能力
  • 概括这类东西应该具有什么特点
  • 以便日后批量产出
	工具:类、对象

 

二、认识类和对象

2.1 什么是类,什么是对象

	类:
	    (抽象)
	    拥有相同功能和相同属性的对象的集合
	对象:
	    (具体)
	    类的实例
	-------------------------------------------------
	如果人是类,男人女人是子类,具体到你,我他就是对象。

2.2 定义类

通过代码来描述清楚一个对象的集合拥有哪些相同的属性和功能

	语法:
	class 类名:
	    类的说明文档
	    类的内容(类的属性和类的方法)
	
	其中:
	    class     关键字;固定写法;
	    类名       自定义;满足标识符要求;驼峰式命名单词首字母大写;见名知义;
	    :          固定写法;
	    说明文档    三个双引号引起来的注释;对类的功能进行说明;方便他人使用;class上面的#注释也会被当作说明文档;
	    类的内容    类的属性(类属性和对象属性);类的方法(对象方法、类方法和静态方法);
class Student:
    """
    举个学生例子
    属性:姓名;年龄;学号;专业
    功能:学习;玩耍
    """
    def __init__(self, name='不明', age=None, stu_id=None, major=None):
        self.name = name
        self.age = age
        self.study_id = stu_id
        self.major = major

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

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


class Circle:
    """
    圆类
    类属性:pi
    对象属性:r
    方法:面积、周长
    """
    pi = 6.2951413

    def __init__(self, r=1):
        self.r = r

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

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

 

三、创建对象

	语法:
	类名()
# 创建两个Student类的对象
stu1 = Student()
stu2 = Student()

print(stu1 is stu2)  # False
print(id(stu1), id(stu2))  # 2903050662088 2903050665544
print(stu1)  # <__main__.Student object at 0x000001645D85B0C8>

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

 

四、构造方法和初始化方法

python的构造方法已经写好了,不自己写
系统会自动为这个类创建对应的构造方法

4.1 构造方法(函数)

  • 名字和类同名
  • 功能是创建对应的类的对象
	def Something(*args, **kwargs):
		新建对象 = 调用__new__创建一个对象
		新建对象.__init__(*args, **kwargs)
		return 新建对象

4.2 初始化方法 init

  • 系统主动调用的方法
  • 当通过类来创建对象时,会被调用
  • 在类中添加__init__时,只要方法名和默认参数self不动
  • 可以根据情况随意添加参数和修改函数体
  • 调用构造方法创建对象时需要几个参数,就看对应的类中__init__函数输了self之外有多少个形参
	魔法方法:
	        类中用__开头__结尾的函数,统称为魔法方法
	        这些方法不需要程序员自己去调用
	        系统会在合适的时机自己调用
# 初始化函数在类创建对象时会被主动调用
class Person:
    def __init__(self):
        print('init被自动调用了')


person1 = Person()  # init被自动调用了


# 给初始化函数传参
class Dog:
    def __init__(self, name, age):
        print(f'name:{name}, age:{age}')


dog1 = Dog('大黄', 18)  # name:大黄, age:18

 

五、类的属性

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

class Planet:
    """
    行星
    """
    is_planet = True
    whats_this = 'Dust of star.'

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

    def __repr__(self):  # 打印当前类的对象时,这个函数的返回值作为打印结果
        return f'<{str(self.__dict__)[1:-1]}>'

5.1 类属性

  • 定义:类里面,函数外面的变量
  • 特点:不会因为对象改变而改变
    • 比如圆类的圆周率,不同的圆都有相同的圆周率
  • 使用:类名.类属性
print(Planet.whats_this)  # Dust of star.

Planet.whats_this = 'Rest of star.'
print(Planet.whats_this)  # Rest of star.

5.2 对象属性

  • 定义:在__init__函数中,以‘self.对象属性=值’ 的方式来定义
  • 特点:可随对象改变而改变
    • 比如人类的名字、年龄
  • 使用:对象.对象属性
earth1 = Planet(name='earth', mass=6 * 10 ** 24)

print(earth1.name)        # earth
print(earth1.mass, 'kg')  # 6000000000000000000000000 kg

print(earth1.whats_this)  # Rest of star.
earth1.whats_this = 'Rest of sun.'
print(earth1.whats_this)  # Rest of sun.
print(Planet.whats_this)  # Rest of star.

print(earth1)  # <'name': 'earth', 'mass': 6000000000000000000000000, 'whats_this': 'Rest of sun.'>

 

六、对象方法

6.1 方法

  • 定义在类中的函数就是方法
  • 对象方法、类方法、静态方法

6.2 对象方法

	怎么定义:  直接定义在类中的函数就是对象方法(定义函数前不加装饰器)
	特点:     自带参数self;调用时系统自动把对象传进self
	怎么调用:  通过 对象.方法名() 的形式调用
	什么时候用: 实现函数功能需要用到对象属性的时候
class Tree:

    def grow(self):
        print(self)
        print('taller,taller...')

6.3 证明系统把对象自动传给了self

tree1 = Tree()
tree1.grow()  # <__main__.Tree object at 0x000001C53CA70488> taller,taller...
print(tree1)  # <__main__.Tree object at 0x000001C53CA70488>
class Rectangle:

    def __init__(self, width=1, height=1):
        self.width = width
        self.height = height

    def area(self):
        return self.width * self.height


square1 = Rectangle(10, 20)
square2 = Rectangle(30, 30)
square3 = Rectangle()

print(square1.area())  # 200
print(square2.area())  # 900
print(square3.area())  # 1

print(type(Rectangle))  # <class 'type'>
print(type(square1))    # <class '__main__.Rectangle'>
练习
# 练习:定义一个点累(二维),有属性:x坐标、y坐标;方法:点到指定点的距离
class Point:

    def __init__(self, location=(0, 0)):
        self.loc = location
        self.x = location[0]
        self.y = location[1]

    def far_from(self, loc):
        return ((self.x - loc[0])**2 + (self.y - loc[1])**2)**0.5


p1 = Point((1, 3))
p2 = Point((10, 4))
d = p1.far_from(p2.loc)
print(d)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值