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

实例方法总结

__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
你的年龄是18
lily
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初始化,私有变量私有方法只能在类中调用,也有粗暴外部调用,不建议这么做!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值