Python 私有变量、类属性及方法、静态方法、多态、 property 方法

class Person:
    def __init__(self, name):
        self.name = name
        self.__age = 20

    def test(self):
        # 可以在类的内部使用
        print(self.__age)

    def __hello(self):
        print('hello world!')


class Man(Person):
    def introduce(self):
        # 私有属性不能在子类中使用
        print('我叫{},今年{}岁'.format(self.name, self.__age))

p = Person('小明')
# print(p.name)
# 当属性前添加两个下划线后,无法在外部访问
# print(p.age)
# print(p.__age)
# print(p.__dict__)
# 默认加两个下划线的属性名前面添加了'_类名'
# 不建议访问
# print(p._Person__age)
# p.test()

# p.__hello()

m = Man('ergou')
# m.introduce()
print(m.__dict__)





#类属性
class Person:
    # 类属性
    # nation = '中国'

    # 限制对象可以使用的属性,可以提高访问的效率
    __slots__ = ('name', 'age', 'nation')

    def __init__(self, name):
        self.name = name
        self.nation = 'china'


# 通过类名访问类属性
print(Person.nation)
p = Person('小明')
print(p.name)
# 通过对象也可以访问类属性,但是不建议
print(p.nation)

# 特殊的类属性

# 类名字符串
print(Person.__name__)

# 基类组成的元组
print(Person.__bases__)

# 类相关的信息
print(Person.__dict__)

print(Person.__slots__)

p.age = 20
# p.xxx = 'yyy'




#类方法
class Person:
    def eat(self):
        print('我喜欢吃麻辣烫,不要麻椒和辣椒')

    # 定义类方法
    @classmethod
    def test(cls):
        # cls:表示当前类
        print(cls, '类方法')

    @classmethod
    def create(cls):
        p = cls()
        p.age = 1
        return p


xiaoming = Person()
xiaoming.eat()

# 类方法通过类名调用
Person.test()

# 创建或简洁的创建对象
xiaohua = Person.create()
print(xiaohua.age)





#示例
class Number:
    def __init__(self, num1, num2):
        self.num1 = num1
        self.num2 = num2

    def add(self):
        return self.num1 + self.num2

    def sub(self):
        return self.num1 - self.num2

    def mul(self):
        return self.num1 * self.num2

    def div(self):
        if self.num2 == 0:
            return None
        return self.num1 / self.num2

    @classmethod
    def pingfanghe(cls, num1, num2):
        n1 = cls(num1, num1)
        n12 = n1.mul()

        n2 = cls(num2, num2)
        n22 = n2.mul()

        n3 = cls(n12, n22)
        return n3.add()


ret = Number.pingfanghe(3, 4)
print(ret)






#静态方法
class Person:
    @staticmethod
    def test():
        print('static method test')

    # 也可以创建对象
    @staticmethod
    def create():
        p = Person()
        p.age = 20
        return p


Person.test()
p = Person.create()
print(type(p))





#多态
class Animal:
    def run(self):
        print('小动物走道都不一样')


class Dog(Animal):
    def run(self):
        print('狗通常走S型')


class Cat(Animal):
    def run(self):
        print('猫一般走猫步')


def func(obj):
    obj.run()


func(Cat())
func(Dog())






#property方法
class User:
    def __init__(self, username, password):
        self.username = username
        self.__password = password

    # 可以保护指定的属性
    @property
    def password(self):
        print('有人想偷看密码')
        return '想看密码,没门'

    # 设置属性时,自动调用
    @password.setter
    def password(self, password):
        print('加密存储密码')
        self.__password = '加密' + password + '加密'


u = User('xiaoming', '123456')
print(u.username, u.password)

u.password = 'abcd'
print(u.__dict__)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值