1 类的创建
# 定义类
class Person(object): # 括号内为继承object类
# 定义方法,此方法相当于Java中的构造方法,第一个参数必须是self
def __init__(self, name, age, sex):
self.name = name
self.age = age
# 创建私有变量
self.__sex = sex
# 定义获取私有变量的函数
def get_sex(self):
return self.__sex
# 定义设置私有变量值的函数
def set_sex(self, sex):
self.__sex = sex
# 定义类中成员方法
def print_self(self):
print('i am a peron.')
def print_info(self):
print('name: %s, age: %s, sex: %s' % (self.name, self.age, self.__sex))
# 创建实例(对象)
lisi = Person('lisi', '23', 'man')
zhangsan = Person('zhangsan', '24', 'woman')
# 调用对象的方法
lisi.print_info() # name: lisi, age: 23
lisi.get_sex() # sex: man
zhangsan.print_info() # name: zhangsan, age: 24
zhangsan.get_sex() # sex: woman
2 继承与多态
# 创建子类继承Person
class Students(Person):
def study(self):
print('i can study..')
# 重写父类方法
def print_info(self):
print('i am a student. ')
# 创建子类对象
stu1 = Students('lihaogn', '22', 'man')
# 子类自动继承父类方法
stu1.print_self() # i am a peron.
stu1.print_info() # i am a student.
stu1.study() # i can study..
# 多态示例
def runs(person):
person.print_info()
runs(Person('wanger', '23', 'woman')) # name: wanger, age: 23, sex: woman
runs(Students('lisan', '24', 'man')) # i am a student.
3 获取对象信息
# 获取对象信息
print('获取对象的类型', type(lisi)) # 获取对象的类型 <class '__main__.Person'>
# 判断一个对象是否是函数
import types
print(type(runs) == types.FunctionType) # True
# 判断对象的类型
print(isinstance(lisi, Person)) # True
print(isinstance(stu1, Person)) # True
print(isinstance(stu1, Students)) # True
# 判断对象是否其中一种
print(isinstance([1, 2, 3], (list, tuple))) # True
# 获取一个对象的所有属性和方法
print(dir(lisi)) # ['_Person__sex', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'age', 'get_sex', 'name', 'print_info', 'print_self', 'set_sex']
# 操作对象的状态
# 判断对象是否含有某个属性
print(hasattr(lisi, 'name')) # True
# 设置对象的某个属性值
setattr(lisi, 'name', 'zhanger')
# 获取某个对象的属性值
print(getattr(lisi, 'name')) # zhanger
4 实例属性和类属性
# 实例属性和类属性
class Man(object):
sex='man'
# 创建实例对象
mm=Man()
# 输出实例的属性值
print(mm.sex) # man
# 输出类的属性值
print(Man.sex) # man
# 给实例的属性值重新复制
mm.sex='woman'
# 重新输出
print(mm.sex) # woman
print(Man.sex) # man
# 删除实例的属性值
del mm.sex
print(mm.sex) # man
注意:
- 如果实例中没有name属性,则会查找类的name属性。
- 实例属性比类属性的优先级高,如果实例属性和类属性同名,则通过实例访问属性值是实例属性。