Python 面向对象编程 类的创建、继承与多态、获取对象信息、实例属性和类属性

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属性。
  • 实例属性比类属性的优先级高,如果实例属性和类属性同名,则通过实例访问属性值是实例属性。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值