python面向对象

Python面向对象编程

对于Python2.7

class xxxx(object):
    pass

对于Python3.x

class xxx ():
    pass

访问限制

  1. Python没有访问限制相关的强类型语法,一大半靠自觉。

  2. __xxx : 前面加了双下划线的代表私有类型变量,类外不能访问。

    其实Python把__xxx打包成了 如下格式,还是可以访问,所以说靠自觉

    _类名__xxx
    a._Student__name
  3. 下划线开头的实例变量名,比如_name,这样的实例变量外部是可以访问的,但是,按照约定俗成的规定,当你看到这样的变量时,意思就是,“虽然我可以被访问,但是,请把我视为私有变量,不要随意访问”。

继承和多态

看下面,一个动物类,狗继承了它,猫继承了它,乌龟继承了它。

注意:子类会覆盖父类。

根据前两条,产生了多态,例如下面的run()函数。(还不理解的话把dog写成int , cat写成float ,…….)

class Animal():
    def run(self):
        print('Animal is running...')

class Dog(Animal):
    def run(self):
        print('Dog is running...')

class Cat(Animal):
    def run(self):
        print('Cat is running...')

class Tortoise(Animal):
    def run(self):
        print('Tortoise is running slowly...')

def run(animal):
    animal.run()

run(Dog())
run(Cat())
run(Tortoise())

方法

就是类里面定义的函数

类属性和实例属性

类属性:类的所有实例都可以访问到

class Pencil():
    # length就是类属性
    length = 22
    # self.material就是实例属性
    def __init__(self, material):
        self.material = material
    pass

__slot__

这个类中,规定只能有哪些属性,(调用其他属性时候报错)作用域只有此类,子类管不到。

@property

装饰器,把方法装饰成属性。写出更加简洁的代码。

class Student():
    """ hello """
    __slots__ = ("__score")

    def __init__(self):
        self.__score = 99

    @property
    def score(self):
        return self.__score

    @score.setter
    def score(self,value):
        if isinstance(value,int):
            self.__score = value
        else:
            print("error@")
            return

a = Student()
a.score = 401
print(a.score)

多重继承

集成许多类,父类之间用逗号隔开

定制类

__len__

类可以使用len()函数

class Student():
    """ test """
    def __init__(self,*args):
        self.names = args

    def __len__(self):
        return len(self.names)
__iter__ __next__

类拥有next()方法

class Fib(object):
    """ iter test """

    def __init__(self):
        self.a, self.b = 0, 1  # 初始化两个计数器a,b

    def __iter__(self):
        return self  # 实例本身就是迭代对象,故返回自己

    def __next__(self):
        self.a, self.b = self.b, self.a + self.b  # 计算下一个值
        if self.a > 100000:  # 退出循环的条件
            raise StopIteration()
        return self.a  # 返回下一个值
__call__

类本身可调用

class Student():
    """ __call__ test """
    def __init__(self,name):
        self.name = name
    def __call__(self):
        print("My name is %s" %self.name)

ss = Student('huajian')
ss()
__getattr__ __str__

前者用来处理类中 没有定义的 属性 ,,后者用来修改显示效果。

1 . 把一个类的所有属性和方法调用全部动态化处理了,不需要任何特殊手段(这里只响应age)

class Student(object):

    def __getattr__(self, attr):
        if attr=='age':
            return lambda: 25
        raise AttributeError('\'Student\' object has no attribute \'%s\'' % attr)

2 . 二者结合处理网站的API , 不用一个个定义一大堆。

class Chain():
    """ __getattr__ """

    def __init__(self, path="www.baidu.com"):
        self.path = path

    def __getattr__(self, path):
        return Chain('%s/%s' % (self.path, path))

    def __str__(self):
        return self.path

    __repr__ = __str__


a = Chain()
print(a.user.qwe)
>>> www.baidu.com/user/qwe   这是输出结果
其他__xx__

还有好多其他,不常用,不写了。

枚举类

常常用来设置真真的常量,因为python中没有const,#define之类的东西。

一般从Enum派生出自定义类:

from enum import Enum, unique


@unique装饰器可以帮助我们检查,保证没有重复值
@unique
class Weekday(Enum):
    Sun = 0  # Sun的value被设定为0
    Mon = 1
    Tue = 2
    Wed = 3
    Thu = 4
    Fri = 5
    Sat = 6


print(Weekday.Fri.value)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值