python之面向对象

Python之面向对象

主要介绍类的相关知识、方法与装饰器等进行介绍

1.类的相关知识

类:可以用class表示;
对象:可以用object,instance(实例)
属性与方法:可通过类定义数据类型的属性和方法(一般指函数)

class people:
	def __init__(self,name,age):  #第一个参数固定为self,指刚创建的实例对象,用于初始化对象
		self.name = name #实例属性
		self.age = score
		self.sex = 'man'  #设定指定属性
	def info(self):  #实例方法,第一个参数必须为self,self指实例对象
		print("他的名字为:{0},年龄为:{1}".format(self.name,self.age))
s = people('李四',18)  #s为实例对象,自动定义__init__()方法
s.info()	

其他操作

dir(s)  #获得对象的所有属性和方法
s.__dict__  #对象的属性字典
isinstance(s,object)  #判断“对象”是不是“指定类型”
2.类方法

类方法通过装饰器@classmethod来定义,注意要点有三:

  • @classmethod必须位于方法上面一行
  • 第一个参数为cls,cls指的是"类对象"本身
  • 类方法中访问实例属性与方法会报错
  • 当子类继承父类时,传入的cls为字类对象
class people:
	sex = 'female'
	@classmethod
	def info(cls):
		print(cls.sex)
people.info()  #不需要给cls传值

静态方法
静态方法,即与“类对象”无关的方法,但需要通过“类调用”,具体可通过@staticmethod来定义,注意:

  • 调用静态方法为:类名.静态方法名(参数)
  • 静态方法中访问实例属性和方法会报错
class people:
	sex = "female"
	@staticmethod
	def sum(a,b):  #静态方法
		print("求得a+b={0}".format(a+b))
		return a+b
people.sum(1,2)

析构函数
del()叫做析构方法,可用于实现对象被销毁时候的操作,Python中当对象没有被引用时,由垃圾回收器自动调用__del__()

__call__方法
Python中,凡是可以将()直接应用到自身并执行的,都可以成为可调用对象

注意:
方法没有重载,若定义了两个相同名字的方法,默认使用最后一个方法

方法的动态性
可动态的为类添加新的方法,或动态修改类已有的方法

class people:
    def age(self):
        print("年龄")
def sex(s):
    print("性别")
def name(s):
    print("姓名")
people.info = sex  #添加方法
people.age = name  #修改方法
people().info()  #性别
people().age()  #姓名

私有方法与私有属性
当以两个下划线开头的属性定义为私有的,其他的为公共的,注意,类内部可以访问私有属性,类外部不能访问私有属性,但外部可以通过__类名__私有属性名进行访问

class Employee:
    __company = "com"
    def __init__(self,name,age):
        self.name = name
        self.__age = age
    def say_company(self):
        print("我的公司",Employee.__company)
        print("姓名",self.__age)
    def __work(self):
        print("啊")
 p1 = Employee("李四",22)  
 print(p1.name)
 print(p1._Employee__age) #调用私有属性,注意第一个下划线是一个,第二个是两个下划线
 p1._Employee__work() #调用私有方法    
3.@property装饰器

@property可以将一个方法的调用方式变成“属性调用”,该装饰器可以约束操作,如可约束输入数字的范围

class Student:
    def __init__(self,name,age):
        self.name = name
        self.__age = age
    @property   #相当于age属性的getter方法
    def age(self):
        print("年龄{0}".format(self.__age))
        return self.__age
    @age.setter
    def age(self,age):  #相当于salary属性的setter方法
        if (0<age<100):
            self.__age=age
        else:
            print("输出错误")
 f1 = Student("g",10000)
print(f1)
f1.age  #年龄10000 10000
f1.age = -10  #操作时,超过(0,100)报错

扩展:None,在python中,None是一个特殊的常量,表示变量没有指定任何对象,None本身是对象,有自己的类型NoneType,且None和任何其他的数据类型比较永远返回False;

c = None
if c is None and c==None:
    print("c是None")

if c==False or c==0: # c与0比较返回false
    print("None不等于False")
#if判断时,空列表[],空字典{},空元组()、0等一系列代表空或无的对象会转换为False
# ==和is判断时,空列表、空字符串不会自动转成False
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小高要坚强

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值