Python 第四天(面向对象)

本文介绍了Python中的面向对象编程概念,包括类和对象的定义、访问可见性、私有变量的使用,@property装饰器的应用,__slots__特性,静态方法和类方法的定义与调用,以及继承的相关知识。通过实例演示了各种特性的使用,强调了私有属性和方法的安全作用以及继承的注意事项。
摘要由CSDN通过智能技术生成

类和对象

类是对象的蓝图和模板,而对象是类的实例

定义类:格式

# __init__是一个特殊方法用于在创建对象时进行初始化操作
class class_name(object):
	def __init__(self):
		pass
	def A(self): # 在类中,一切的变量和函数都要印记(self)
		pass

if __name__ =="__main__":
	a = class_name() # 实例,类名带括号,直接运行初始化函数
	a.A()

例子

# 进度条
import time
class Jindutiao (object):
    def __init__(self):
        pass
    def Jindu(self):    
        for i in range(1,101):
            time.sleep(0.5)
            print("#" * i,"%d %%" % i)
                
if __name__ == "__main__":
    a = Jindutiao()
    a.Jindu()

运行结果
运行结果

# 读取文档并计算文档中有多少大写字母
class Num(object):
    def __init__(self,path):
        self.path = path
        self.count = 0
    def Str(self):
        with open (self.path,mode="r") as f:
            readlines = f.readlines()
            for line in readlines:
                new_line = line.strip("\n")
                for i in new_line:
                    if i.isupper():
                        self.count += 1
        print("The upper word is %d"%self.count)

if __name__ =="__main__":
    path = "\\Users\\小仙女\\Desktop\\123.txt"
    a = Num(path)
    a.Str()

运行结果
运行结果

访问可见性

  • 私有变量,变量名前面加"__"
  • 如果非要使用私有变量,那么可以使用dir(class())去查看它真正的名字
  • 私有变量/函数,在类内部可以直接调用.
  • 如果你想体现一个变量/函数特别重要你可以使用"_"

@property装饰器

  • 访问器:@property
  • 修改器:@变量名.setter

例子

class Person(object):
    def __init__(self, name, age):
        self._name = name
        self._age = age
    # 访问器
    @property
    def name(self):
        return self._name
    # 访问器
    @property
    def age(self):
        return self._age
    # 修改器
    @age.setter
    def age(self, age):
        self._age = age

    def play(self):
        if self._age <= 16:
            print('%s正在玩飞行棋.' % self._name)
        else:
            print('%s正在玩斗地主.' % self._name)

def main():
    person = Person('王大锤', 12)
    person.play()
    person.age = 22
    person.play()
    
if __name__ == '__main__':
    main()

运行结果
运行结果

__slots__魔法

__slots__的限定只对当前类的对象生效,对子类并不起任何作用

例子

class Person(object):
    # 限定Person对象只能绑定_name, _age和_gender属性
    __slots__ = ('_name', '_age', '_gender')

    def __init__(self, name, age):
        self._name = name
        self._age = age

    @property
    def name(self):
        return self._name

    @property
    def age(self):
        return self._age

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

    def play(self):
        if self._age <= 16:
            print('%s正在玩飞行棋.' % self._name)
        else:
            print('%s正在玩斗地主.' % self._name)


def main():
    person = Person('王大锤', 22)
    person.play()
    person._gender = '男'

if __name__ == '__main__':
    main()

运行结果
运行结果

静态方法和类方法

类方法

  • 定义:使用装饰器@classmethod。第一个参数必须是当前类对象,该参数名一般约定为“cls”,通过它来传递类的属性和方法(不能传实例的属性和方法)
  • 调用:实例对象和类对象都可以调用。

静态方法

  • 定义:使用装饰器@staticmethod。参数随意,没有“self”和“cls”参数,但是方法体中不能使用类或实例的任何属性和方法;
  • 调用:实例对象和类对象都可以调用

继承

单继承
子类在继承的时候,在定义类时,小括号()中为父类的名字
Object是所有类的根类
父类的属性、方法,会被继承给子类

注意:

  1. 私有的属性,不能通过对象直接访问,但是可以通过公有方法访问
  2. 私有的方法,不能通过对象直接访问
  3. 私有的属性、方法,不会被子类继承,也不能被访问
  4. 一般情况下,私有的属性、方法都是不对外公布的,往往用来做内部的事情,起到安全的作用

例子

class A (object):
    def __init__(self,a1):
        self.a = 1000
        self.a1 = a1
    def A1(self):
        print('A1')

class B(A):
    def __init__(self,a1):
        A.__init__(self,a1)
        pass
    def B1(self):
        print(self.a1)

if __name__ == '__main__':
    b = B('hahaha')
    b.B1()

运行结果
运行结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值