class Person: country = '中国' #类变量,一般是从所有的对象中都存在的共性,例如所有的人都是中国人 def __init__(self,name,Birthday): self.name = name #实例变量或字段(数据库中)或属性(Java中) self.Birthday = Birthday def Fly(self): # 实例方法 print('i think you will Fly ') @classmethod #类方法的标志 每写一个类方法上面都要带这个标志 def lei(cls): # cls 与self 作用基本相同,不同是self 传递的是对象的引用,而cls 传递的是类名的引用 print(cls) print('我是类方法') @staticmethod #静态方法的标志 每写一个静态方法上面都要带这个标志 def jingtai(): #相当于类中的 函数调用的时候与调用类方法的一样 print('我是静态方法') @property #如果一个属性需要通过某个表达式计算才能得到的,但又想当属性来使用 #@property属性方法的作用就是通过@property把一个方法变成一个静态属性 def JiSuanAge(self): '''属性方法只能含有一个self 参数,需要有返回值,不能赋值
调用的时候,不需要写括号,直接当成属性变量来用就可以'''
return 2018 - self.Birthday
# # 类变量与实例变量之间的区别
# print(Person.country)#打印的是类变量
# a = Person('cisco',11)
# print(a.country) # 由于么有在实例变量中找到country,所以向上查找,打印的还是类中变量
# # Person.country = '美国' # 直接对类变量进行修改
# print(Person.country)
# print(a.country) #由于么有在实例变量中找到country, 所以向上查找,打印的还是类变量内容
# # b = Person('bb',11)
# # b.country = '俄国'# 在b对象中创建一个实例变量
# print(b.country) #直接访问的是b对象中的实例变量
# 类方法,静态方法与实例方法之间的区别
# a = Person('马云',50) #创建对象
# a.Fly()#实例方法的调用 对象.实例方法 #
# print(Person)# 证明类方法调用的时候默认是对cls 传递的是类名的内存地址的引用
# Person.lei()#类方法的调用 类名.类方法 #
# Person.jingtai() #静态方法的调用, #
# # 在实例中调用类方法
# a = Person('马云',50)
# a.lei() #即使是通过对象去访问类方法,但默认传递给cls的还是类名 #
a = Person('马云',1994)
#创建对象 print(a.JiSuanAge)
# 总结:普通的方法,可以通过实例化之后,通过对象.方法进行调用,在类中也可以通过使用self.方法进行调用,实例变量也一样
# 类方法直接通过使用 类名.方法,直接进行调用,对象也可以通过 对象.类方法名进行调用类的方法
# 但是静态的方法是完全独立出来的,只是调用的时候通过使用类名进行调用,其余的与类没有多大的关系
# 需要注意的是类方法只能访问类变量,不能访问实例变量
私有的变量
平时能够直接在类的外面调用一般叫做公有的方法,私有方法不能直接类的外面进行调用,只能在类的定义里面使用
在python中使用__作为方法或者变量的前缀. 那么这个方法或者变量就是一个私有的.
class Person:
def __init__(self,name):
self.__name = name
def shiyongsiyou(self):
return self.__name
由于私有的变量在类的外面是不能直接进行访问的,如果想要在外面访问私有的变量可以通过 访问一个正常的方法,通过正常的方法返回私有的变量 如上
缺点是只能查看,不能进行修改
私有方法
私有方法只能在类中进行调用,类的外面不能访问,如果在外面直接调用会直接报错
class Person:
def __init__(self,name):
self.__name = name
def __yue(self):
print(‘这是私有方法’)
def zhengchang(self):
self.__yue()