您的位置:首页 > 编程语言 > Python开发

python类中的 实例方法 类方法 静态方法 私有变量 私有方法 不完全总结

2018-10-27 01:25 537 查看

实例方法总结

__init__方法是类初始化方法,一旦实例化就给对象赋__init__中的值,self是实例本身,在以下代码self指的是thecity这个对象

# 建立一个类
class city(object):

sex='female'

# 构造方法
def __init__(self, name, age):
self.name = name      #name 为私有变量
self.age = age

# 实例方法
def yourage(self):
print("你的年龄是" + self.age)

# 实例方法
def yourcity(self, cityname):
print("你的名字是{0},你所在的城市是{1}".format(self.name, cityname))

a = input("请输入你的名字")
b = input("请输入你所在的城市")
c = input("请输入你的年龄")

thecity=city(a,c)  # 实例化一个对象thecity
thecity.yourcity(b)  #通过对象调用实例方法
thecity.yourage()   #通过对象调用实例方法

输出

请输入你的名字lily
请输入你所在的城市shanghai
请输入你的年龄18
你的名字是lily,你所在的城市是shanghai
你的年龄是18

类方法总结

通过类调用的是类的变量,不是init初始化的变量,因为init是通过实例化对象调用的初始化的值,下面仔细看name这个变量

# 建立一个类
class city(object):

sex='female'
name='balala'

# 构造方法
def __init__(self, name, age):
self.name = name      #name 为私有变量
self.age = age

# 实例方法
def yourage(self):
print("你的年龄是" + self.age)

# 实例方法
def yourcity(self, cityname):
print("你的名字是{0},你所在的城市是{1}".format(self.name, cityname))

# 类方法 cls表示city这个类 cls.name 的name是这个类里面的name变量和init中的name无关 所以用类访问的name是lily 实例访问的name是lily
@classmethod
def sexy(cls):
return cls.sex, cls.name

a = input("请输入你的名字")
b = input("请输入你所在的城市")
c = input("请输入你的年龄")

# 实例方法的调用
thecity=city(a,c)  # 实例化一个对象thecity
thecity.yourcity(b)  #通过对象调用实例方法
thecity.yourage()   #通过对象调用实例方法
print(thecity.name)     #通过对象调用实例变量

print(city.sex)     #通过对象调用实例变量

# 类方法的调用
print(thecity.sexy())   #通过对象调用类方法
print(city.sexy())  #通过类调用类方法

输出

请输入你的名字lily
请输入你所在的城市shanghai
请输入你的年龄18
你的名字是lily,你所在的城市是shanghai
你的年龄是18lily
female('female', 'balala')
('female', 'balala')

静态方法总结

静态方法,通过类直接调用,不需要创建对象,不会隐式传递self

class city(object):
sex='female'

# 静态方法,通过类直接调用,不需要创建对象,不会隐式传递self
@staticmethod  #@是方法装饰器,用来约束方法的
def sexy2():
return city.sex #直接用在方法中用类名调用变量

print(city.sexy2()) # 通过类调用静态方法

输出

female

静态方法向前缩进一下,就可以做普通方法用,仔细看缩进

class city(object):
sex = 'female'

def sexy2():
return city.sex

print(sexy2())

输出

female

私有变量总结

私有变量只好在类里面调用,一般不在外部调用,也可以硬来调用例如print(thecity._city__name)
就是(实例._类名__私有变量),所以不访问私有变量全靠程序员自觉,不介意调用,这样破坏结构,仔细看name

class city(object):
name = 'balala'

# 构造方法
def __init__(self, name):
self.__name = name  # name 为私有变量

def yourcity(self, cityname):
print("你的名字是{0},你所在的城市是{1}".format(self.name, cityname))

a = input("请输入你的名字")
b = input("请输入你所在的城市")

thecity = city(a)  # 实例化一个对象thecity

thecity.yourcity(b)  # 通过对象调用实例方法
print(thecity.name)  # 通过对象调用实例变量
print(thecity._city__name)  # 通过对象调用私有变量也是可以的,but一般不会调用私有变量,python没有真正意义的封装,一切靠自律,骚不骚气

输出

请输入你的名字lily
请输入你所在的城市shanghai
你的名字是balala,你所在的城市是shanghai
balala
lily

私有方法总结

和私有变量一样,私有方法只好在类中调用,也有破坏结构的在外部调用私有方法,类似私有变量,一般不建议

class city(object):

sex='female'
name='balala'

# 构造方法
def __init__(self, name, age):
self.name = name      #name 为私有变量
self.age = age

# 实例方法
def __yourage(self):
print("你的年龄是" + self.age)

# 实例方法
def yourcity(self, cityname):
print("你的名字是{0},你所在的城市是{1}".format(self.name, cityname))
self.__yourage()    #内部访问私有方法

a = input("请输入你的名字")
b = input("请输入你所在的城市")
c = input("请输入你的年龄")

# 实例方法的调用
thecity=city(a,c)  # 实例化一个对象thecity
thecity.yourcity(b)  #通过对象调用实例方法
print('-----------------------------------------------------')
thecity._city__yourage()   #通过对象调用实例方法

输出

请输入你的名字lily
请输入你所在的城市shanghai
请输入你的年龄18
你的名字是lily,你所在的城市是shanghai
你的年龄是18-----------------------------------------------------
你的年龄是18

总结
类中的类方法和静态方法才可以直接用类调用方法,实例方法用实例调用方法,用init初始化,私有变量私有方法只能在类中调用,也有粗暴外部调用,不建议这么做!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐