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__)
Python 私有变量、类属性及方法、静态方法、多态、 property 方法
最新推荐文章于 2021-10-07 19:04:19 发布