day15-面向对象、类、魔法方法

面向对象、类、魔法方法

  • 数据 with open(文件路径) as 重命名 的方式,在这外面写将自动关闭文件
  • exit() 退出程序

面向对象

  • 面向过程编程:看到问题想到写逻辑或步骤解决问题,越编越难
  • 函数式编程:看到问题第一个想到有没有一个函数能解决,或者封装一个函数解决
  • 面向对象编程:利用工具,采用工具,现有的东西来解决

类和对象

  • 类就是拥有相同功能或者相同属性的对象的集合

    • 如果人是类,小罗就是对象,小芳就是另一个对象
    • 车是类,小罗的车就是对象
  • 创建类-用代码来描述你的这个类是拥有那些相同(用函数)和那些相同属性(用变量)的对象的集合

语法:
class 类名:
    类的说明文档
    类的内容(包含方法和属性)
说明:
a.   class -关键字;固定写法
b.   类名    -由程序员自己命名
              两个要求:是标识符;不是关键字
              规范:见名知意,不适用系统的函数名、类名和模块名;采用驼峰式命名(大驼峰,每个首字母大写)

c. 类的说明文档  - 本质就是多行注释
d.类的内容      -  包含定义在类中的函数(方法)和定义在类中的变量(属性)
                  方法包括:对象方法、类方法、静态方法
                  属性包括:类属性、对象属性

user_name PEP8
userName 小驼峰
UserName 大驼峰
"""


"""
对象是通过类来创建的

语法:
类名()


"""
class Dog:
    pass

#创建对象
dog1=Dog()


print(dog1)

对象方法

  • 定义在类中的函数就是方法
  • 对象方法:
a.怎么定义:直接定义在类中的函数就是对象方法
b.怎么调用:以'对象.xxx()'的形式来调用
c.特点:自带参数self,调用函数的时候self不需要传参,系统自动将当前对象传给self(谁调用self指向谁)
  • 类方法
a.怎么定义: 定义函数前添加装饰器 @classmethod
b.怎么调用:以‘以类名.xxx()’的形式来调用
c.特点:自带参数cls,调用函数的时候cls不需要传参
  • 静态方法
a.怎么定义:定义函数前添加装饰器:@staticmethod
b.怎么调用:以‘类名.xxx()’的形式来调用
c.特点:没有特点
class A:
    def func1(self):
        print(f'对象方法')

    def func2(self,a,b=2):
        print(f'对象方法:a:{a},b:{b}')

    #装饰器     类方法
    @classmethod
    def func3(cls):
        print('类方法')


    #静态方法
    @staticmethod
    def func4():
        print(f'静态方法')

#创建对象
a1 = A()

#通过对象调用对象方法
a1.func1()


"""a1被传入到self位置"""

a1.func2(200)
a1.func2(12,22)

# 类调用类方法
A.func3()

A.func4()

魔法方法

  • a.函数名以_ _开头,并且以 _ _结尾
  • b.魔法方法不需要程序员自己调用,系统会在特定情况自动调用
2.常见的魔法方法
a.__init__:如果类中添加了__init__方法,那么在创建当前类的对象的时候就会自动调用它
b.__repr__:打印类的对象的时候,如果类中添加了__repr__方法,打印类的对象的时候会自动调用这个方法,并且将这个方法对应返回作为打印结果进行打印
修改打印方式,这个打印必须是字符串
class A:
    def __init__(self):
        print('init方法被调用')

a1=A()

class B:
    def __init__(self,n,m):
        print(f'n:{n},m:{m}')


class C:
    def __repr__(self):
        return f'对象:{id(self)}'

b1=B(1,2)
c1=C()
print(c1)

属性

  • 1.类属性:直接类中定义的变量的类属性

  • 怎么使用:以’类名.xxx’的方式使用

  • 什么时候用:如果属性值,不会因为对象不同,就是类属性

  • 2.对象属性

  • 怎么定义:以’self.属性名=属性值‘的形式定义在_ _ init _ _中

  • 怎么使用:以‘对象.xxx’的方式使用

  • 什么时候用:如果属性值,会因为对象不同,就是对象属性

class A:
    #a就是类属性
    a=10
    name='张三'

    #x 和 n是对象属性
    def __init__(self):
        self.x=10
        self.n='hello'
#使用类属性
print(A.name)

#使用对象属性
a1=A()
print(a1.x)

class yuan:
    pi=3.14  #类属性
    def __init__(self,r=0):
        self.r=r
        #如果对象方法中需要用到对象属性,由self来提供
    def area(self):
        return yuan.pi*self.r**2
    def girth(self):
        return 2*yuan.pi*self.r

class Dog:
    def __init__(self,name,breed,age=3,gender='母'):
        self.name=name
        self.age=age
        self.gender=gender
        self.breed=breed

dog1=Dog('菜菜','土狗')
print(dog1.name)
y1=yuan(2)
print(y1.girth())

继承

  • 让子类直接拥有父类的属性和方法
语法:
class 类名(父类1,父类2,父类3,..):
    类的说明文档
    类的内容
注意:定义类的时候没有写父类,那么这个类会默认继承object(基类) 
调用父类__init__ 中用super().__init__调用
class A:
    m = 100

    def __init__(self):
        self.n=200

class B(A):
    def __init__(self):
        super().__init__()
        self.p=1000
    pass
b1=B()
print(b1.n)
print(b1.p)
其中B是子类
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值