python之面向对象编程

01 第一步 创建类, self指向调用该函数的对象 也就是通过类实例出来的对象 

class Person():
    def __init__(self):
        self.name = 'zs'
        self.age = 12

    def fn(self):
        print(self)


p1 = Person()
print(p1)  # <__main__.Person object at 0x000002509F331790>
print(p1.fn())  #  <__main__.Person object at 0x000002509F331790>

02 一个类可以创建多个实例对象 每个实例对象的指针不同也就是内存地址不同

p2 = Person()

print(p2) <__main__.Person object at 0x0000022309AD1940>

print(p2.fn()) <__main__.Person object at 0x0000022309AD1940>

p1 = Person()

print(p1) <__main__.Person object at 0x0000022309AD1910>

print(p1.fn()) <__main__.Person object at 0x0000022309AD1910>

03 添加获取对象的属性  给对象添加私有的属性和方法

p1 = Person()

p1.sex = '男'

p1.fn1 = lambda : 10

print(p1.fn1())   10

print(p1.sex)  男

04  类的返回值 通过  __str__来实现

class Person():
    def __init__(self):
        self.name = 'zs'
        self.age = 12

    def fn(self):
        print(self)

    def __str__(self):
        return f'{self.name}-{self.age}'

print(Person()) # zs-12 

p1 = Person()

print(p1)  # zs-12

05 类的__del__属性 当代码被执行完 内存空间被释放掉 就会执行这个方法

class Person():
    def __init__(self):
        self.name = 'zs'
        self.age = 12

    def fn(self):
        print(self)

    def __str__(self):
        return f'{self.name}-{self.age}'

    def __del__(self):
        print('我被释放了')

Person() #  我被释放了

06 案例 之 地瓜的类 

class Digua():
    def __init__(self):
        self.time1 = 0
        self.status = '生' # 0 生  1-10 未熟  11-20 快熟  20以上 熟了
        self.list = [] # 需要添加的材料

    def addTime(self,time):
        self.time1+=time
        if self.time1 == 0:
            self.status = '生'
        elif 0<self.time1<10:
            self.status = '未熟'
        elif 10<self.time1<20:
            self.status = '快熟'
        else:
            self.status = '熟了'

    def addList(self,cailiao):
        self.list.append(cailiao)

    def __str__(self):
        print(f'地瓜烤了{self.time1}分钟,目前的状态是{self.status},添加的材料有{self.list}')
07 类的继承 

class A():
    def __init__(self):
        self.name ='zs'

class B(A):
    pass

c = B()
print(c.name) # zs 

08  类的属性和方法的覆盖 , 如果同时继承多个父类,有重名的打印的是第一个父类

class A():
    def __init__(self):
        self.name = 'zs'

    def fn(self):
        print('我是A')



class B():
    def __init__(self):
        self.name = 'ls'

    def fn1(self):
        print('我是B')


class C(A,B):
    pass



c = C()
print(c.name) # zs 

09 自用拥有的属性和方法与父级重名以自身的为主

class A():
    def __init__(self):
        self.name = 'zs'


class B(A):
    def __init__(self):
        self.name = 'ls'

b = B()

print(b.name) # ls

10  在子类如何调用父类的属性和方法呢:

第一种方式 在子类中调用需要先调用父类的 __init__(self) 的方法  再调用父类的属性或者方法

class B(A):
    def __init__(self):
        self.name = 'ls'

    def fn(self):    
        A.__init__(self)  #  在这里使用父类的属性
        return A().name

b = B()

print(b.fn()) # zs 

11 定义私有的属性和方法 以__开头

class A():
    def __init__(self):
        self.__name = 'zs'
        self.age = 20

    def __fn(self):
        print('私有的方法')

a = A()
print(a.__name) # 报错
print(a.age) # 20 

12 类的多态

class Dog():
    def fn(self):
        print('wangwnag')

class Person():
    def fn(self):
        print('你好')

class Lei():
    def fn(self,lei):
        return lei.fn()

dog = Dog()
person = Person()
lei = Lei()
lei.fn(dog) # wangwang
lei.fn(person) # 你好

13 类方法的使用场景。 如访问私有类属性的时候 定义类的方法 使用@claasmethod

class A():
    __tools = 'wo'
    @classmethod
    def fn(cls):
        print(cls.__tools)

    def fn1(self):
        print(self.__tools)

a = A()
a.fn1()
a.fn()

14 静态方法既可以类访问也可以对象访问

class A():
    __tools = 'wo'
    def fn1(self):
        print(self.__tools)
    @staticmethod
    def fn():
        print('123')


A.fn()
a =A()
a.fn()

15  捕获错误

try:
    print(1/0)
except:
    print('出现了错误')
else:
    print('没有错误')
finally:
    print('不管有没有错都打印')
try:
    print(1/0)
except (NameError,ZeroDivisionError):  # 捕获指定的错误
    print('出现了错误')
else:
    print('没有错误')
finally:
    print('不管有没有错都打印')
try:
    print(1/0)
except (NameError,ZeroDivisionError) as error:  # 捕获指定的错误
    print(error) # 打印报错信息
else:
    print('没有错误')
finally:
    print('不管有没有错都打印')

16 模块的导入方式:

import 模块名

from 模块名  import 功能名

from 模块名  import *

from 模块名  as 别名

from 模块名  import 功能名 as 别名

17 在文件中定义导出的方法 使用 __all__ = ['导出的方法']

__all__ = ['test']

test ():

        print(‘123’)

18 创建包 包会自创一个__init__的文件

在这个文件中可以定义导出的模块列表

正常导入 import 包名.文件名  使用的时候 包名.文件名.方法()

18 __dict__将实例对象 转化为字典的形式{}

class A():
    def __init__(self):
        self.age = 20

a = A()
print(a.__dict__) # {'age': 20}

19 eval() 将字符串变为list 

a = "[[1,2], [3,4], [5,6], [7,8], [9,0]]"

print(eval(a)) #  [[1, 2], [3, 4], [5, 6], [7, 8], [9, 0]]

b = "[{'bane':'123'},{'age':'12'}]"
print(eval(b)) # [{'bane': '123'}, {'age': '12'}]

相关推荐

  1. python面向对象编程

    2024-06-18 03:36:09       33 阅读
  2. Python面向对象编程

    2024-06-18 03:36:09       62 阅读
  3. Python面向对象编程

    2024-06-18 03:36:09       39 阅读
  4. Python面向对象

    2024-06-18 03:36:09       44 阅读
  5. python面向对象

    2024-06-18 03:36:09       59 阅读
  6. python面向对象

    2024-06-18 03:36:09       37 阅读
  7. python面向对象

    2024-06-18 03:36:09       38 阅读
  8. python面向对象编程

    2024-06-18 03:36:09       26 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-18 03:36:09       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-18 03:36:09       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-18 03:36:09       82 阅读
  4. Python语言-面向对象

    2024-06-18 03:36:09       91 阅读

热门阅读

  1. Python2.7中os.path模块常用函数记录

    2024-06-18 03:36:09       29 阅读
  2. PostgreSQL - sql_compatibility 兼容合并库问题

    2024-06-18 03:36:09       20 阅读
  3. NDS域名解析服务

    2024-06-18 03:36:09       26 阅读
  4. 国际化项目开发中关于时间的问题二

    2024-06-18 03:36:09       29 阅读
  5. Linux知识汇总

    2024-06-18 03:36:09       25 阅读
  6. Flink集群运行模式

    2024-06-18 03:36:09       21 阅读