Python 类与对象

类的定义与实例化对象

对象 = 属性 + 方法 对象是类的实例,类的定义数据为属性,对数据的操作函数叫方法
_init_(self)  是类的构造函数,创建对象,也就是类实例化时自动执行,用于初始化类属性  self 表示自身,用于访问类中定义的属性或者方法
定义一个类名为Student,包含name,sag属性,还有输出name,age属性的函数print_student()函数,Student类的实例为对象zhangsan,lisi
class Student:
    name = None
    age = None
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def print_student(self):
        print("我的名字叫 %s 年龄为 %d 岁" % (self.name,self.age))
zhangsan = Student("张三",15)
zhangsan.print_student()
lisi = Student("李四",16)
lisi.print_student()

类属性与实例化属性

类Student2中属性name和age为类属性,也叫静态属性,是固有的,不可删除。Python中还可定义实例属性,也叫动态属性可以删除。
class Student2:
    name = None
    age = None
    def __init__(self,name,age,sex = '男'): #定义一个实例属性性别
        self.name = name
        self.age = age
        self.sex = sex
    def print_student(self):
        print("我的名字叫 %s 年龄为 %d 岁" % (self.name,self.age))
    def print_sex(self):
        print("我的名字叫 %s 性别为 %s" % (self.name,self.sex))
wangwu = Student2("王五",20,"男")
wangwu.print_student()
wangwu.print_sex()
maliu = Student2("马六",19,"女")
maliu.print_student()
maliu.print_sex()
del wangwu.sex  #删除对象wangwu的属性sex所以王五不能在拥有sex属性,再次访问wangwu的sex时程序会抛出异常
wangwu.print_student()
maliu.print_student()
maliu.print_sex()
还可以在类定义结束和对象产生后动态添加实例属性
class Student3:
    name = None
    age = None
    def __init__(self,name,age): #定义一个实例属性性别
        self.name = name
        self.age = age
    def print_student(self):
        print("我的名字叫 %s 年龄为 %d 岁" % (self.name,self.age))
    def print_sex(self):
        print("我的名字叫 %s 性别为 %s" % (self.name,self.sex))
Student3.sex = "男"
daer = Student2("大鹅",20,"男")
daer.print_student()
daer.print_sex()
xdaer = Student2("小鹅",19)
xdaer.sex = "女"
xdaer.print_student()
xdaer.print_sex()
del daer.sex #也可以删除

属性分装

Python中的属性可以直接访问
class Person:
    name = None
    age = None
    def __init__(self,name,age):
        self.name = name
        self.age = age
zhao = Person("赵",20)
print('姓名为 %s 年龄为 %d' % (zhao.name,zhao.age))
zhao.age = 21
print('姓名为 %s 年龄为 %d' % (zhao.name,zhao.age))
面向对象编成中类定义的属性分装起来,不允许外部直接访问,若要访问只能通过类定义的方法进行。
在属性名前加两个下划线,可阻止外部对属性的直接访问
class Person2:
    __name = None
    __age = None
    def __init__(self,name,age):
        self.__name = name
        self.__age = age
    def set_name(self,name):
        self.__name = name
    def set_age(self,age):
        self.__age = age
    def get_name(self):
        return self.__name
    def get_age(self):
        return self.__age
qian = Person2("钱",20)
qian.set_age(22)
print('姓名为 %s 年龄为 %d' % (qian.get_name(),qian.get_age()))
通过@property装饰符既可以分装类的属性,还可以简化访问形式
class Person3:
    def __init__(self,name,age):
        self.name = name
        self.age = age
    @property   #在返回值属性前加@property
    def name(self):
        return self._name
    @property
    def age(self):
        return self._age
    @name.setter   #再修改值属性前加@属性名.setter,且方法中属性名前加一个下划线
    def name(self,name):
        self._name = name
    @age.setter
    def age(self,age):
        self._age = age
tan = Person3("谭", 22)
print("姓名为 %s 年龄为 %d" % (tan.name,tan.age))

类的继承 

在定义新的类时可继承现有类的属性和方法。 新的类被称为子类,被继承的类被称为父类。如果定义的新类没有指向父类则父类默认为object,object是类继承的根
class Father:
    __name = None
    __age = None
    def __init__(self,name,age):
        self.__name = name
        self.__age = age
    def set_name(self,name):
        self.__name = name
    def set_age(self,age):
        self.__age = age
    def get_name(self):
        return self.__name
    def get_age(self):
        return self.__age
class Son(Father):
    __sex = None
    def __init__(self,sex = '男',name = "NOname",age = 19):
        super().__init__(name,age) #用super().__init__()调用父类的__int__()函数
        self.__sex = sex
    def set_sex(self,sex):
        self.__sex = sex
    def get_sex(self):
        return self.__sex
my = Son("小白")
my.set_age(19)
my.set_sex("男")
my.set_name("小白")
print("name = %s age = %d sex = %s" % (my.get_name(),my.get_age(),my.get_sex()))

多态

多态就是将对象作为函数的形参,函数执行时将根据实际传人的对象实参执行相应的操作,可以实现给函数传人不同对象,得到不同结果的效果。进行多态编程时,要求作为参数的对象具有相同的接口。
class A:
    __name = None
    def __init__(self,name = 'noname'):
        self.__name = name
    def set_name(self,name):
        self.__name = name
    def get_name(self):
        return self.__name
    def who(self):
        print("my name is %s" % self.__name)
class B(A):
    __age = None
    def __init__(self,name = 'noname',age = 0):
        super().__init__(name)
        self.__age = age
    def set_age(self,age):
        self.__age = age
    def get_age(self):
        return self.__age
    def who(self):
        print("my name is %s  age is %d" % (super().get_name(),self.get_age()))
def whoareyou(xx):
    xx.who()
s = A("杨")
q = B("谭", 22)
whoareyou(s)
whoareyou(q)

类中的BIF

(1)  isinstance (对象,类),用于判断给出的对家是否为指定类的实例,子类的对象仍然判定为父类的实例。

(2) issubclass (类1,类2),用于判断“类1”是否为“类2”的子类。

(3) hasattr (类或者对象,属性或者方法),判断指定类或者对象是否具有指定的属性或者方法,其中属性或者方法表示成字符串形式且方法为不带括号的函数名。

(4) getattr (类或者对象,属性或者方法),获取指定类或者对象的属性或者方法,其中属性或者方法表示成字符串形式且方法为不带括号的函数名,通过 getattr ()函数,可以获得类或者对象的属性,或者运行对象的方法。

(5)  setattr (类或者对象,属性,值),用于设置指定类或者对象的属性,其中属性表示成字符串形式,值按照实际类型给出,通过 setattr()函数,可以动态设置类或者对象的属性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值