python中定义一个动物类_Python类及常见的方法属性定义

2023-05-16

Python类及常见的方法属性定义

Python是一门完全面向对象(OOP)的语言,对于Python来说,一切皆对象,

一切皆对象,

猫,老虎,狗,狼这些都是我们认识的一种动物,在现实生活中我们把它叫做动物,而在面向对象的编程语言(OOP)中我们称这类在生活中的具体事物叫做对象,既然提到对象我们就不得不说一下类,什么是类那,打个比方,就好动物学家通过动物的共同点,把动物进行分类,猫和老虎被分到了猫科,狗和狼被分到了犬科,猫科,犬科实际上就是一种类,因为他们具备了猫和老虎的共同点,所以你就可以把类理解为事物共同点的抽象

不过在现实生活我们是通过对象去认识类的,而在编程语言中我们把他进行了反转,是通过类去认识对象,

对象和类

对象就是类的实例化,类就是对象的具体抽象

面向对象的三大特征

封装(encapsulation)

继承(inheritance)

多态(polymorphism)

开发的过程:其实就是不断的创建对象,使用对象,指挥对象做事情。

设计的过程:其实就是在管理和维护对象之间的关系.

在Python中的类

定义类

3d7b3b67ab03d7b96466f04569f31b5e.png

定义一个简单的person类,在这个类里没有定义任何方法

创建类

在上面我们定义了一个类,下面我们就用这个类创建一个实例对象P

3879cf65d1cfb4e5ec7146c0ea1cdd6d.png

定义一个带方法的类

e9960af5156ac4f2b6e36c77bc68d110.png

创建一个类调用方法

c2b6a1435fbaafded7b6f95751571a99.png

定义一个带有各种常用变量,方法类型的类

class Person(object):

'''

起到限制作用,表示在类中只能有这三个属性,不可以在动态或静态的添加对该类的实例添加属性

注意在使用__slots__限制变量时,如果加入类变量的名称不发生错误,如下

错误写法:

__slots__ = ("_id", "name","__age","address")

'''

__slots__ = ("_id", "name", "__age")

address = "我是一个类变量,可以被类名直接调用"

def __new__(cls, *args, **kwargs):

print("创建类时调用")

return object.__new__(cls)

def __init__(self):

self.name = "我是一个全局变量,在任何地方都可以调用"

self._id = "我只可以在本模块里被调用"

self.__age = "我是一个私有变量,只能在本类里调用不能再外部调用"

print("初始化实例变量时被调用")

def test(self):

print("我是一个实例方法只有对象被创建才可以被对象调用")

def __testPri(self):

print("我是一个私有方法,不可以被外不调用")

@staticmethod

deftestStatic(self):

print("我是一个静态方法可以直接用类名被调用")

@classmethod

def testCls(cls):

print("我是一个类方法可以直接用类名被调用")

def __del__(self):

print("类被销毁时调用")

def __str__(self):

print("返回对类的描述")

return "我是%s"%self.__class__.__name__

def __call__(self, *args, **kwargs):

print("类被当做函数使用时调用")

各种变量,内置方法浅解

__new__

2a6ca80b7344c8ae26b858effa7e22b2.png

1,__new__方法只能在继承了object的新式类中使用,在object类中将__new__方法定义为静态方法,至少需要传递一个参数cls,cls表示需要实例化的类对象,

此方法在你实例化对象时自动调用,cls参数也由Python解释器自动提供。

2,复写__new__必须时要有返回值,返回实例化出来的实例对象,可以return返回父类__new__出来的实例,或者直接是object的__new__出来的实例都可以,上文是直接调用object的__new__方法

3,__new__()是唯一在实例创建之前执行的方法,一般用在定义元类时使用

__init__

406a5c8575409344b9b6f996b2b4b299.png

1,__init__方法由Python解释器自动调用,在调用时会自动传入一个本类的实例变量

2,__init__方法是在__new__之后调用的,因为Python解释器需要__new__返回的实例对象,作为参数传入__init__方法

3,__init__主要用于初始化本对象的实例变量或初始化父类的实例变量

初始化父类的实例变量如下:

superName.__init__(self)

super(superName, self).__init()#新式类中使用

4, __init__不需要返回值

__del__

ad827c27c647d1d22a2f13cdc272f683.png

1,__init__方法由Python解释器自动调用,在调用时会自动传入一个本类的实例变量

2,__del__是在python删除一个对象时有Python自动调用的,

那什么时候,会让Python内存管理机制认为他是需要删除的那,当他的引用计数器为零,也就是没有没有任何引用时Python会认为他需要被释放,然后调用__del__方法

查看一个对象的引用计数

importsys

sys.getrefcount(object )

__str__

c5aed284c71d0a58d9928fedc3937d2f.png

1,此方法的作用,是描述一个类描述,如果没有重写会直接返回一个类的

类名 父类at存储地址>

__call__

0bb811c15dd8cea6065f00e85036b8ba.png

如果重写类这个方法,就可以把这个类型的对象当做函数来用,相当于重载了括号运算符,

在类装饰器会用到

私有化实例变量

9e8d666cdfff2716227bb9e1e9812c69.png

1,设置类的属性为__,不能使用对象名.属性名的方式直接访问对象的属性。就好像java的private一样,可以达到封装的目的,

那我们我怎么对该属性设置值和访问那

1:对外提供公开的用于设置对象属性的public方法

1:设置set

2:获取get

2:在set方法中加入逻辑判断,过滤掉非法数据。

3:将所有的成员变量封装加上__,提供get、set方法,

Ps:其实在python中的,类的私有化是通过改变属性名实现的,修改规则如下:

_类名__属性名

调用使用被Python修改过得私有属性

24d5e218aaca93bc95fde7ff06757e31.png

打印结果

a37290ed8da657143098073d202433d3.png

131684dd46a94510679df2e59fc59aec.png

2,私有化属性也是实例属性,Python每创建一个实例对象,就会在内存空间中开辟一处内存,每处内存空间都有实例属性,他们不会相互影响,也就是说你修改一个对象的实例属性,另一个同类对象的同名属性不会受到影响,是相对独立

单下划线变量

_xx以单下划线开头的表示的是protected类型的变量。即保护类型只能允许其本身与子类进行访问。若内部变量标示,如: 当使用“from M import”时,不会将以一个下划线开头的对象引入

类属性

c441ab744a248f53269e851d03816aae.png

1,类属性是指,那些定义在类里,方法之外的属性

2,类属性,不随实例对象的创建而创建,无论你使用该类创建多少个实例对象,类属性只存在一个

3,类属性就是类对象拥有的属性,他被类对象的所有实例对象所共有,可用于实例对象间的数据共享,不可以用self.类属性,因为self代表当前调用者对象,

4,使用类属性时 需要用 类名.类属性名或 类对象的实例对象.类属性名访问,,如果要修改值时,需要用 类名.类属性名=“xxx” 去修改,不可以用 类对象的实例对象.类属性名,

如果使用 类对象的实例对象.类属性名 修改,则相当于为该对象添加了一个实例属性,

静态方法

010be05fb81d25ca9d5cfc14ce5a8bf0.png

1,静态方法要使用@staticmethod修饰,要不然就是实例方法

2,静态方法可以不写参数,但如果这样就不能调用当用实例属性

3,在无参静态方法里不可以调用实例属性,self,super,因为静态方法是先于实例对象存在的,

4,要想在静态方法里调用实例方法,可以在静态方法中写上参数,把当前实例对象当做实参传给静态方法,这样就可以间接的调用静态方法

如下

52db4e5a58f4f59ad76b95fcc2790a95.png

类方法

07bb90b7c924f601ca9dc7a63e952e5d.png

1,类方法是类对象的方法,只有一个

2,类方法要使用@classmethod修饰,要不然就是实例方法

3,类方法的第一个参数是类对象,由Python自动传入,

4,在类方法里不可以调用实例属性,self,super,因为类方法是先于实例对象存在的,

私有方法

402d85d81423b73af1cad8420594a4c2.png

1,在Python中私有方法通过前面加两个下划线来定义如:def __xx(self):

2,只有该类对象的实例对象可以访问子类已不可访问,不可以在外部调用,

创建对象的调用顺序

1,先调用__new__方法,由此方法返回一个实例对象给调用者(Python解释器)

2,调用者(Python解释器)在把刚刚创建的 实例对象 作为实参传递并调用__init__方法,完成初始化

3,并返回实例对象的引用

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python中定义一个动物类_Python类及常见的方法属性定义 的相关文章

随机推荐