Python系列-面向对象程序设计

目录

继承概念

多态

类的定义与使用

属性

使用@property装饰器操作类属性

使用类或实例直接操作类属性

使用Python内置函数操作属性

继承

方法重写

print("--------继承----------")
class Animal:
    def __init__(self,name):
        self.name = name
    def play(self):
        print("你是",self.name)
class Dog(Animal):
    pass
dog = Dog("旺财")
dog.play()

print("--------多态----------")
class Animal:
    def say(self):
        print(self.__class__.__name__) # 获取类名
class Dog(Animal):
    def say(self):
        print("Dog")
class Cat(Animal):
    def say(self):
        print("Cat")
dog = Dog()
dog.say()
cat=Cat()
cat.say()

print("--------类的定义与使用----------")
class AddBook(object):
    def __init__(self,name,phone):   #父类
        self.name = name
        self.phone = phone  #定义构造函数,接受name和phone两个参数,并存储为实例变量self.name和self.phone
    
    def get_phone(self):
        return self.phone #定义方法返回电话号码
class EmplEmail(AddBook):
    def __init__(self, nm, ph, email):
        super(EmplEmail, self).__init__(nm,ph) #调用父类的构造函数初始化name和phone
        #AddBook.__init__(self, nm, ph)
        self.email = email

    def get_email(self):
        return self.email   #定义方法返回邮箱
if __name__ == "__main__": #只有在直接运行这个文件时才会执行
    Detian = AddBook('handetian','18210413001')
    Meng = AddBook('shaomeng','18210413002')

    print('Detian.get_phone()')
    print('AddBook.get_phone(Meng)')

    alice = EmplEmail('alice','18210418888','alice@xkops.com')
    print(alice.get_email(),alice.get_phone())
#创建__init__()方法
class People:
    def __init__(self,name,sex,age):
        self.name = name
        self.sex = sex
        self.age = age
 
 
print('--------属性----------')
#使用@property装饰器操作类属性
'''
class Demo:
    @property
    def methodname(self):
        block
'''
class Animal(object):
    def __init__(self, name, age):
        self._name = name
        self._age = age
        self._color = 'Black'

    @property
    def name(self):
        return self._name
    
    @name.setter
    def name(self, value):
        if isinstance(value,str):
            self._name = value
        else:
            self._name = 'No name'

    @property
    def age(self):
        return self._age
    
    @age.setter     #@<attribute>.setter 装饰器允许你在设置属性值时执行一些逻辑,如验证或转换值。
    def age(self,value):
        if value > 0 and value < 100:
            self._age = value
        else:
            self._age = 0
    
    @property
    def color(self):
        return self._color   #@property 装饰器允许你将一个方法定义为类的一个属性,这样就可以像访问普通属性一样访问这个方法,而不需要显式地调用它(即不需要加上括号)。
    
    @color.setter
    def color(self,value):
        self._color = value
    
a = Animal('black dog', 3)
a.name = 'white dog'
a.age = 300
print('Name:', a.name)
print('Age:', a.age)

#使用类或实例直接操作类属性
class Employee(object):
    empCount = 0
    def __init__(self, name, salary):
        self.name = name
        self.salary = salary
        Employee.empCount += 1
    def displayCount(self):
        print("total employee",Employee.empCount)
    def displayEmployee(self):
        print("name:",self.name,",salary:",self.salary)

emp1 = Employee("丽丽",10000)
emp1.displayCount()
emp1.displayEmployee()
emp1.salary = 20000
print(emp1.salary)
emp1.age = 25
print(emp1.age)
del emp1.age

#使用Python内置函数操作属性
print("--------------")
class Employee(object):
    empCount = 0
    def __init__(self,name,age,salary):
        self.name = name
        self.age = age
        self.salary = salary
        Employee.empCount += 1
    
    def displayCount(self):
        print("total employee",Employee.empCount)
    
    def displayEmployee(self):
        print("name:",self.name,"age:",self.age,"salary:",self.salary)
        
emp1 = Employee("Rose",27,20000)

if hasattr(emp1,'name'):
    name_value = getattr(emp1,'name')
    print("name的属性值为:",name_value)
else:
    print("员工属性不存在")

if hasattr(emp1,'tel'):
    print("员工属性已存在")
else:
    setattr(emp1,'tel','13911111111')
    t1 = getattr(emp1,'tel')
    print("tel的属性值为:",t1)
    setattr(emp1,'tel','13211111111')
    t2 = getattr(emp1,'tel')
    print('tel修改后的属性值为:',t2)

if hasattr(emp1,'age'):
    delattr(emp1,'age')
else:
    print("员工age属性不存在")
    
if hasattr(emp1,'age'):
    print("属性age存在!")
else:
    print("属性age不存在!")  

print("-------继承----------")
class Person(object):

    def __init__(self, name, age):
        self.name = name
        self.age = age
        self.weight = 'weight'

    def talk(self):
        print("person is talking......")

class Chinese(Person):

    def __init__(self,name,age,language):
        Person.__init__(self,name,age)
        self.language = language
    def walk(self):
        print('is walking........')

class American(Person):
    pass

c=Chinese('bigberg',22,'Chinese')
print(c.talk())
print(c.walk())

#方法重写
class Animal:
    def run(self):
        print("动物会跑~~~")
    def sleep(self):
        print("动物睡觉~~~")

class Dog(Animal):
    def bark(self):
        print("汪汪汪~~~")
    
    def run(self):
        print("狗跑~~~")

d = Dog()
d.run()
  

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值