标签:method 操作 turn second discount 删除 port test 其他
类的私有成员:
类的私有静态属性,类的私有方法,对象的私有属性
从类的外部,内部,子类的角度去研究
#Python中的私有在属性或方法前加双下即可
class Person:
__country=‘China‘#私有静态属性
def __init__(self,name,age):
self.name=name
self.__age=age#对象的私有属性
def __func(self):#私有方法
print(‘in __func ‘)
def func1(self):
print(Person.__country)
Person.__func(self)
class A(Person):
def func(self):
Person.__country
Person.__func(self)
print(self.__age)
# 私有静态属性:
# 类的外部:不可以
# print(Person.__country)
#类的内部:可以
# Person.func1(1)
#对象可以查看私有静态属性? 不可以
# obj=Person()
# print(obj.__country)
# 私有方法:
# 类的外部:不可以
# Person.__func(1)
# 类的内部:可以
# 对象掉用私有方法可以吗?不可以
# obj=Person()
# obj.__func()
# 对象的私有属性
# 类的外部:不可以
# obj=Person()
# print(obj.__age)
# 类的内部:可以
# 子类调用?也不可以
# 这些私有的属性,方法的本质是名字前面加了_类名,变相的私有
# 总结:私有的属性,方法只能内部使用
类的其他成员:
类方法,静态方法,属性
class A:
def __init__(self):#双下方法,特殊方法
pass
def func(self):#实例化方法,给对象用的方法,会默认把对象传递给第一个参数self
pass
@classmethod
def class_method(cls):#类方法,给类使用的方法,它会默认把本类传递给第一个参数cls
pass
@staticmethod
def static_method():#不依赖于类和对象,只是一个函数
pass
@property
def price(self):#属性,有一些方法名,听起来像属性的
pass
类方法:
# 实例化一个对象,最后得到对象的总数
class Student:
__count=0
def __init__(self,name,age):
self.name=name
self.age=age
Student.sum_num()
@classmethod
def sum_num(cls):
cls.__count+=1
@classmethod
def get_count(cls):
return cls.__count
alex=Student(‘alex‘,10)
alex1=Student(‘alex1‘,10)
alex2=Student(‘alex2‘,10)
# print(alex2.get_count())
ret=Student.get_count()
print(ret)
# 总结:
# 类方法一般是用来操作静态属性的,与对象无关的时候需要调用类方法
# 对象也可以调用类方法,不推荐
静态方法:
#静态方法是一个独立的,单纯的函数
#譬如,我想定义一个关于时间操作的类,其中有一个获取当前时间的函数
import time
class TimeTest(object):
def __init__(self, hour, minute, second):
self.hour = hour
self.minute = minute
self.second = second
@staticmethod
def showTime():
return time.strftime("%H:%M:%S", time.localtime())
print(TimeTest.showTime())
t = TimeTest(2, 10, 10)
nowTime = t.showTime()
print(nowTime)
#总结:对象和类都可以掉静态方法
属性:
class Goods:
def __init__(self,name,origi_price,discount,):
self.name=name
self.origi_price=origi_price
self.discount=discount
@property
def price(self):
return self.origi_price*self.discount
apple=Goods(‘苹果‘,5,0.8)
print(apple.price)
# 总结:属性装饰的是一些函数名听起来很像属性的方法。
# 只要对象调用,就行其中的代码
属性setter delete的使用
# 属性的全解
class A:
@property
def price(self):
print(‘对象调用我‘)
@price.setter
def price(self,new):
print(‘对象修改我‘)
@price.deleter
def price(self):
print(‘对象删除我‘)
a=A()
a.price#对象调用我
a.price=1#对象修改我
del a.price#对象删除我
# 总结:
# 这些调用的本质是在触发,一旦触发就执行其中的代码
# 不推荐,在对象的属性与property伪装的属性(方法)同名,有坑
isinstance
issubclass
class A:
pass
class B(A):
pass
obj=B()
print(isinstance(obj,B))
print(isinstance(obj,A))
# isinstance(o,a)是判断o是不是这个类(这个类的派生类)的对象
print(issubclass(B,A))
#判断B是不是A的子类
元类:就是type,元类创建出了Object,str,list这些类
反射:
# 反射:通过字符串对对象进行操作
# 可以操作的对象有:
# 实例化的对象,类,本模块,其他模块(可以.的都可以反射)
# hasattr()
# getattr()
# setattr()
# delattr()
# 实例化的对象
class A:
country=‘China‘
def __init__(self,name,age):
self.name=name
self.age=age
def func(self):
print(‘in func‘)
obj=A(‘alex‘,18)
if hasattr(obj,‘name‘):
print(getattr(obj,‘name‘))
增
setattr(obj,‘sex‘,‘man‘)
print(obj.__dict__)
删delattr(obj,‘sex‘)
print(obj.__dict__)
# 具体应用
class User:
def login(self):
print(‘登陆‘)
def register(self):
print(‘注册‘)
obj=User()
while 1:
msg=input(‘>>>‘).strip()
if hasattr(obj,msg):
getattr(obj,msg)()
标签:method 操作 turn second discount 删除 port test 其他
原文地址:https://www.cnblogs.com/liuer-mihou/p/10326202.html