python面向对象01

141 阅读3分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第14天

面向对象

引例

世间万物皆对象

面向对象:

  • 对象
  • 属性
  • 方法

举个例子

对象: A的手机,B的手机,C的手机

对象的集合:

类别: 手机类

​ 人类 :A,B,C

  • 手机类

共同特征:品牌,颜色,尺寸,价格,... ----->属性

动作:通讯,学习,上网,... ---->方法

  • 人类

特征:姓名,年龄,性别,身高,血型,....----->属性

动作:吃饭,睡觉,读书 ,... ---->方法

多个对象 ---->提取对象的共同特征和动作----> 封装到一个类中

定义

'''
class 类名(父类):   这里的括号内容可以不加
	属性
	方法
''' 

注意

  • 所有类名都要首字母大写,多个字母采用驼峰式命名
  • 所有的类都默认继承object
  • 一般都是先定义类再细分

定义类和属性

  • 调用
# 定义类
class Student:
    name = 'mzmm403'
    age = 18
   
#使用类创建对象
mzmm403 = Student()

#调用
print(mzmm403.name)
print(mzmm403.age)

image-20220422135217948.png

  • 修改
# 定义类
class Student:
    name = 'mzmm403'
    age = 18
   
#使用类创建对象
mzmm403 = Student()

#修改
mzmm403.age = 10
mzmm403.name = 'lichuang'

# 修改类属性
Student.name = 'mxr'

image-20220422135854086.png

  • 总结
  1. 调用属性值时我们是先调用对象属性,若没有再调用类属性,如果两者属性都没有则会报错

  2. 在对一个对象的属性进行修改时,我们只能修改对象的属性,而类属性我们无法更改

  3. 若想更改类属性,我们得调用类属性才能更改

方法--类中的函数

普通方法

def 方法名(self[,参数1,参数2]):
	pass(方法内容)
# []内的参数可以选填
class Phone:
    brand = 'huawei'
    price = 4999
    type = 'P40'
    
    #Python类里的方法:call
    def call(self):
        print('self----->',self)
        print('正在打电话....')
#对象1        
phone1 = Phone()
print(phone1,'----1----')
phone1.call()
#对象2
phone2 = Phone()
print(phone2,'----2----')
phone2.call()


>>>>
<__main__.Phone object at 0x0000017DF5EC1BE0> ----1----
self-----> <__main__.Phone object at 0x0000017DF5EC1BE0>
正在打电话....
<__main__.Phone object at 0x0000017DF5F32040> ----2----
self-----> <__main__.Phone object at 0x0000017DF5F32040>
正在打电话....
>>>>

注意:(self)在这里我们看到self在传值的时候把创建的对象地址作为变量传进去了

构造器和__ int __()方法

__ 名字 __()这种方式叫魔术方法

class Phone:
    def __init__(self):
        print('mzmm403')
        
p = Phone()        
  1. 找到类Phone(Phone的内存空间)
  2. 利用Phone类,向内存申请一块像Phone一样的空间
  3. 去Phone中寻找有没有__ init __(魔术方法),如果没有该方法,则直接在内存开辟一块地方给对象p。若有则进入该方法执行里面的动作,这是这里的self为创建的地址,然后将地址赋值给对象p

总结:总而言之就是使用__ init __就是在创建对象的时候将对象模板化,直接统一属性

  • 优势:如果我们不初始化即不事先声明属性,那么下面的方法将不能正常使用

记住这句话:类的属性就是一个类的共性 实例属性就是一个类的个性