python基础——类的属性和方法

人盡茶涼 提交于 2020-02-20 15:49:04

参考:https://www.runoob.com/python3/python3-class.html

类的属性

包含:私有属性和公开属性,也可称为私有变量公共开变量

私有属性

格式:__private_attr = attr_value
解释:两个下划线开头,声明该方法为私有方法,只能在类的内部调用 ,不能在类的外部调用,也就是只能在类定义时访问。内部调用使用self.__private_attr。

普通的类中的属性和其他定义变量无区别

格式:变量名 = 变量值

# coding:utf-8
class A:
    __priv = 20
    com = 30
    
a = A()
print(a.com)
print(a.__priv) #实体对象使用私有属性报错
'''
30
AttributeError: 'A' object has no attribute '__priv'
'''

类的方法

私有方法和公共方法,定义和属性的定义相同,使用权限也一样。

# coding:utf-8

class A:
    __priv = 20
    com = 30
    def __init__(self):  #由于__priv是类中的属性,在内置函数中不需要写入形参
        print("this is init:%d"%self.__priv)
    def com_func(self):		#公共方法
        print("this is com:%d"%self.__priv)
    def __pri_func():		#私有方法
        print('this is private func!')

a = A()
print(a.com)
a.com_func()
a.__pri_func() #私有方法在实体对象使用出现错误
'''
this is init:20
30
this is com:20
AttributeError: 'A' object has no attribute '__pri_func'
'''

类的专有方法

init : 构造函数,在生成对象时调用
del : 析构函数,释放对象时使用
repr : 打印,转换
setitem : 按照索引赋值
getitem: 按照索引获取值
len: 获得长度
cmp: 比较运算
call: 函数调用
add: 加运算
sub: 减运算
mul: 乘运算
truediv: 除运算
mod: 求余运算
pow: 乘方

运算方法的重写

class Vector:
   def __init__(self, a, b):
      self.a = a
      self.b = b
 #___str__()方法也是特殊方法,在有自己定义的情况下,print的打印会使用这个自己定义的返回值
   def __str__(self):
      return 'Vector (%d, %d)' % (self.a, self.b)
   
   def __add__(self,other):		#对加法运算重写
      return Vector(self.a + other.a, self.b + other.b)
 
v1 = Vector(2,10)
v2 = Vector(5,-2)
#加法运算重写后的使用,功能同print (v1.__add__(v2))
print (v1 + v2)	#使用上面定义的__str__()方法
#Vector (7, 8)

类中普通方法的参数

若想将类中的普通方法的参数还能再其他方法中使用,必须将包含该参数的方法在__init__方法中使用

class Vector:
    def __init__(self, a, b):
      self.a = a
      self.b = b
      self.mid() #只有类方法在这里使用后才能在后面使用该该中的参数
 
    def mid(self):
        self.luqi={}
   
    def fiin(self):
    #在这使用了mid中的luqi参数,因为在__init__中加入了mid
        self.luqi['first']=self.a+self.b	
        print(self.luqi['first'])
 
v1 = Vector(2,10)
v1.fiin()
#12
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!