Python面向对象

class Person:

类名,首字母要大写

实例方法:对象.方法名()

方法间调用,使用self.方法名()

class A:
    def test(self):
        print('1111')

    def test2(self):
        self.test()    
        print('22222')

a=A()
a.test2()
#1111
#22222

类方法:类名.方法名()  ,对象.方法名()

class A:
    @classmethod
    def run(cls):
        print('类方法')


a=A()
A.run()
a.run()

静态方法:类名.方法名()  ,对象.方法名()

class A:
    @staticmethod
    def run(cls):
        print('静态方法')


a=A()
A.run()
a.run()

区别:

类方法:调用类属性

静态不调用任何self,cls

实例方法,操作数据

实际应用:

class Test:
    count=0

    def sum(self,num):
        Test.count+=int(num)
        print('实例方法')

    @staticmethod
    def info():
        print('静态方法')

    @classmethod
    def show(cls):
        print(cls.count)
        print('类方法')

t=Test()
t.info()
t.sum(5)
t.show()
# 静态方法
# 实例方法
# 5
# 类方法

魔术方法:

__init__  实例化时调用的初始方法
__str__ 打印对象名调用
__new__  开辟空间
__call__ 对象当作函数用
__del__ 没有指针引用调用

class Test:

    # def __new__(cls, *args, **kwargs):
    #     print('-----------new---------')

    def __init__(self, name):
        self.name = name
        print('==============init')

    def __call__(self, *args, **kwargs):
        print('--------call-----------')

    def __str__(self):
        print('---------str----------')
        s=self.name
        return s

    def __del__(self):
        print('---------del------------')

    # def __new__(cls, *args, **kwargs):
    #     print('==============new')

t = Test('tom')
print(t)
t()
# ==============init
# ---------str----------
# tom
# --------call-----------
# ---------del------------

开发模式:单例

#单例模式
#单例例模式就是确保一个类只有一个实例
#重写__new__方法实现
# 应用场景:
# client--->访问AppConfig()类读取配置文件信息
# 很多地方同时调用就会实例多个浪费server资源
# 单例模式就可以解决!
class Singleton:
    __intance=None  #私有化地址存放
    def __new__(cls, *args, **kwargs):
        if cls.__intance is None:
            cls.__intance=object.__new__(cls)
            return cls.__intance
        else:
            return cls.__intance

s=Singleton()
s1=Singleton()
print(s==s1)    #True

私有化

封装

  • __属性,将属性私有化,只能在类中调用
class Person():
    def __init__(self, name, age):
        self.name = name
        self.__age = age

    def __str__(self):
        return 'name:{},age:{}'.format(self.name, self.__age)

p=Person('tom',18)
print(p)
print(p.name)
#print(age) 不能调用私有
  • 使用get/set方法私有化
#使用get和set操作
def setAge(self, age):
    self.__age = age

def getAge(self):
    return self.__age

p.setAge(19)
print(p.getAge())

print(p.__dir__())
print(p._Person__age)   #只是间接系统改名,还是可以访问
  • 使用装饰器
@property
def age(self):
    return self.__age

@age.setter
def age(self, age):
    self.__age = age

p=Person('tom',10)
p.age=20
print(p.age)

继承

1.has a  一个类调用另外一个自定义的类

2.is a   父子类

class Father:
    def __init__(self, name):
        self.name = name

    def a(self):
        print('------fa')

    def b(self):
        print('--------fb')


class Son1(Father):
    def __init__(self, name, age):
        # 調用父類
        super().__init__(name)
        self.age = age

    # override重写(覆盖)
    def a(self,xxx):
        super().a()
        print('----Son1.a_{}'.format(xxx))


class Son2(Father):
    def __init__(self, name, color):
        super().__init__(name)
        self.color = color


s1 = Son1('tom', 18)
s1.a('tttt')
s2 = Son2('jimmy', 'red')
s2.b()

多继承和顺序

经典类:从左到右,深度优先 python2
新式类:广度优先  python3

class P1:
    def foo(self):
        print('p1---foo')


class P2:
    def foo(self):
        print('p2--foo')
    def bar(self):
        print('p2--bar')

class C1(P1,P2):
    pass

class C2(P1,P2):
    def bar(self):
        print('c2---bar')


class D(C1,C2):
    pass

#查看顺序
import inspect
print(inspect.getmro(D))
print(D.__mro__)


d=D()
d.foo()
d.bar()
# p1---foo
# c2---bar

多态

多态:同一种事物的多种形态,动物分为人类,猪类(在定义角度) 

class Animal:
	pass
class Person(Animal):
	pass
class Pet(Animal):
	pass

多态性:一种调用方式,不同的执行效果(多态性)

def func(obj):
    obj.run()
 
func(peo1)
func(pig1)
func(d1)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python面向对象编程是一种编程范式,它将程序组织成对象的集合,每个对象都有自己的属性和方法。在Python中,可以通过定义类来创建对象,并通过实例化类来创建具体的对象。引用[1]中的代码示例展示了一个Animal类,其中包含了初始化方法和一个__str__方法来返回对象的描述信息。通过这个类,可以创建Animal对象,并通过print函数输出对象。引用中的代码示例展示了如何使用@property装饰器来定义类的属性和属性的访问方法。通过这种方式,可以在访问属性时像访问普通属性一样使用点号,而不需要使用方法调用的方式。引用中的代码示例展示了多态在Python中的应用。多态是面向对象编程的重要概念,它允许不同的对象以相同的方式对外部访问,但具体的实现可能不同。在这个示例中,father、son和daughter类都继承了father类,并重写了tell方法。通过调用不同的对象的tell方法,可以看到不同的输出结果。总之,Python面向对象编程是一种灵活且强大的编程方式,它允许开发者以对象为中心来思考和组织代码,提高了代码的可读性和可维护性。通过定义类、创建对象和使用类的属性和方法,可以实现丰富多样的功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Python面向对象(全套)](https://blog.csdn.net/Thewei666/article/details/126652501)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值