首页 > 编程语言 >python 类与对象

python 类与对象

时间:2023-01-18 15:22:22浏览次数:46  
标签:__ .__ name python self 对象 score age

python 类与对象(未完待续)

定义

括号里的是继承类,如果没有类继承,就继承object类,它是所有类的基础类。

pass 是占位符,还可用在判断和循环中

class 类名(object):
    pass

# 栗子如下
class Person(object):
    pass
# 定义对象per1
per1 = Person()

属性

自定义属性和方法

python支持对象自定义属性和方法

from types import MethodType

class Person(object):
    pass
# 调用
def desc(self):
    print("%s"% self.name )
   
per = Person()
per.name = "jack" # 绑定自定义属性;Person类中没有定义name这一属性,per实体独有的name属性
per.desc = MethodType(desc, per) # 绑定自定义方法
per.desc() # 调用自定义的方法

限制实例的属性的绑定_ _slots_ _

# 限制person类仅能绑定name,age
class Person(object):
    __slots__ = ('name', 'age') 

per = Person()
per.age = 18 # 不报错
per.sex = 1 # 报错,sex并不在slots限制内

@property

对实例属性操作的时候,属性很可能不是直接暴露的,一般通过getter和setter方法来实现;或@property

class Person(object):
    __slots__ = ('name', 'age', '__score') # 用tuple定义允许绑定的属性名称

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

    @score.setter
    def score(self, val: float):
        if val > 0:
            self.__score = val

# 调用
per = Person()
per.score = 18

构造器 _ _init_ _

class Person(object):
    def __init__(self,name:str,age:int)

初始化类对象时会调用它。python的构造器不能重载,不能重载,不能重载

类中方法

  • 方法的第一个参数必须是 self,而调用时不需要传self
  • 自定义方法不能用_ _开头
class Student(object):
    def __init__(self,name:str,age:int,score:float) -> None:
        self.name = name
        self.age = age
        self.score = score
    def desc(self) -> None:
        print("%s %d %f"%(self.name,self.age,self.score))

访问限制

在Class内部,可以有属性和方法,而外部代码可以通过直接调用实例变量的方法来操作数据,这样极不安全;要让内部属性不被外部访问,可以把属性的名称前加上两个下划线_ _,就变成了一个私有变量(private)使外部无法修改和访问

class Student(object):
    def __init__(self,name:str,age:int,score:float) -> None:
        self.__name = name
        self.__age = age
        self.__score = score
    def desc(self) -> None:
        print("%s %d %f"%(self.__name,self.__age,self.__score))

# 调用,虽然有修改语句,但是两次打印相同
stu = Student("jack",19,134.5)
stu.desc()
stu.__name = "tom"
stu.__age = 11
stu.desc()

get/set 支持外部对内部私有变量访问的通道

class Student(object):
    def __init__(self,name:str,age:int,score:float) -> None:
        # super(Student,self).__init__(name=name,age=age)
        self.__score = score
        self.__name = name
        self.__age = age
    # 获取name
    def get_name(self)->str:
        return self.__name
    
    # 设置name
    def set_name(self,name:str) ->None:
        print("设置名字")
        if len(name) > 0:
            self.__name = name
    # 介绍
    def desc(self) -> None:
        print("%s %d %f"%(self.__name,self.__age,self.__score))

继承

python支持多重继承,一个子类就可以同时获得多个父类的所有功能

class Animal(object):
    __slots__ = ('name')
    def desc(self):
        print(self.name)
        
class Runnable(object):
    def run(self):
        print('Running...')
# 继承了2个类
class Tigger(Animal,Runnable):
    pass
# 调用
tiger = Tigger()
tiger.name = 'wowo'
tiger.desc()
tiger.run()

多态

子类方法覆盖父类方法

标签:__,.__,name,python,self,对象,score,age
From: https://www.cnblogs.com/JarryShu/p/17059888.html

相关文章

  • VS2019 C++ 调用python函数/类对象的方法
    1.环境配置VS工程配置要和python一致,安装的python如果是64位的,工程配置也要选成64位的在工程配置中添加包含目录和库目录,添加python环境目录里的include和libs文件......
  • c++生成csv文件并在python界面可视化
    前景概要为什么生成的是csv文件而不是txt文件因为txt在python那边处理起来比较麻烦需要两组数而数与数之间存在对应关系这样两组数同样需要两组就是两组xy数值然后......
  • 学习笔记——Spring中的AOP(AspectJ);Spring中AOP概述;Spring中AOP相关术语;AspectJ中切
    2023-01-18一、Spring中的AOP1、AspectJ(1)简介Java社区里最完整最流行的AOP框架在Spring2.0以上版本中,可以使用AspectJ注解或基于XML配置的AOP(2)使用AspectJ步骤①在s......
  • Python工具箱系列(二十三)
    基于游标的操作游标是数据库操作的相对底层的能力。简单的操作如下:importmysql.connectorimportrandomhost='localhost'user='root'password='8848is8848'dbname=......
  • Python学习中的六个技巧小结
    1.引言“Beautifulisbetterthanugly.”上述为著名的TheZenofPython的第一句话,也是有追求的python开发人员的信条之一。所以我们的问题来了:如何编写漂亮的Python代......
  • Scanner对象
    Scanner对象Scanner是Java5的新特性,导入包的路径为"java.util.Scanner"我们可以通过Scanner类来获取用户的输入Scanner基本语法创建一个Scanner对象Scanners=newS......
  • python property使用
    classGoods():def__init__(self):self._price=""@propertydefprice(self):[email protected](self,val......
  • python 引用父类super
    classParent():def__init__(self,name):print(name)classSon(Parent):def__init__(self,name):super().__init__(name)s=Son(name="ccc")......
  • 类型提示和python函数中'->'的用法
    一、类型提示在python中,我们定义一个有参函数,调用该函数时需要传入参数,如下所示:#定义一个简单的函数defget_full_name(first_name,last_name):full_name=fir......
  • 5面向对象
    面向对象面向对象编程(oop)面向对象的本质是:以类的方式组织代码,以对象的组织(封装)数组抽象三大特性:封装、继承、多态先有类后又对象,类是对象的模板类和对象类是一种抽......